Given an integer array nums, find the sum of the elements between indices i and j (i ≤ j), inclusive.
Example:
Given nums = [-2, 0, 3, -5, 2, -1] sumRange(0, 2) -> 1 sumRange(2, 5) -> -1 sumRange(0, 5) -> -3
Note:
- You may assume that the array does not change.
- There are many calls to sumRange function.
===========================================================================
题目链接:https://leetcode.com/problems/range-sum-query-immutable/
题目大意:给定一个数组,多次使用sumRange(i,j)返回数组中从i到j的元素之和。
思路:先用一个和nums一样大的数组sums存储nums的和,其中sums[i] = sums[i-1] + nums[i],时间复杂度为O(N),空间复杂度为O(N)。最后计算sumRange(i,j)时,结果就是sums[j] - sums[i] + nums[i]sums[j] - sums[i] + nums[i],这样的时间复杂度为O(1),因为多次使用sumRange()函数,所以这样做能大大减少算法运算时间。
参考代码:
class NumArray {
public:
NumArray(vector<int> &nums) {
this -> nums = nums ;
int n = nums.size() ;
if ( n )
{
sums = vector <long long> ( n ) ;
sums[0] = nums[0] ;
for ( int i = 1 ; i < n ; i ++ )
sums[i] = sums[i-1] + nums[i] ;
}
}
int sumRange(int i, int j) {
return sums[j] - sums[i] + nums[i] ;
}
private:
vector <long long> sums ;
vector <int> nums ;
};
// Your NumArray object will be instantiated and called as such:
// NumArray numArray(nums);
// numArray.sumRange(0, 1);
// numArray.sumRange(1, 2);