303. Range Sum Query - Immutable

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:

  1. You may assume that the array does not change.

  1. There are many calls to sumRange function
【思路】挨个遍历会超时,应该计算到每个元素之前的值。动态规划的思想。

class NumArray {
public:
    NumArray(vector<int> &nums) {
        if(nums.empty())
            return;
        subSum.push_back(nums[0]);
        for(int i = 1; i < nums.size();i++)
        {
            subSum.push_back(subSum[i-1]+nums[i]);
        }
        
    }

    int sumRange(int i, int j) {
        if(i==0)
         return subSum[j];
        if(i<=0||i>subSum.size()||j>subSum.size()||i>j)
         return 0;
        return subSum[j] - subSum[i-1];
    }
private:
     vector<int> subSum;
};


// Your NumArray object will be instantiated and called as such:
// NumArray numArray(nums);
// numArray.sumRange(0, 1);
// numArray.sumRange(1, 2);



你可能感兴趣的:(303. Range Sum Query - Immutable)