(LeetCode 303) Range Sum Query - Immutable

Q:
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.

給定一個整型數組,求給定下標i,j 之間的數的和。已知整形數組不常變,且該函數可能會被調用多次。

solution:
這道題最簡單的方法就是每次輸入ij 使用循環算出下標之間的數和。但是有一點提示,這個函數會被調用多次,這種方法時間消耗就會較大。
我們可以預先把數組前k0<=k<=sum.size() 個數和算出來存儲在sums
那麼sums(i,j)=sums(j)sums(i1)
注意當i=0 時直接輸出sums[j] 即可

class NumArray {
public:
    NumArray(vector<int> &nums) {
        int sum=0;
        for(int i = 0; i < nums.size(); i++){
            sum+=nums[i];
            sums.push_back(sum);
        }
    }

    int sumRange(int i, int j) {
        if(i==0)return sums[j];
        return sums[j]-sums[i-1];
    }
    vector<int>sums;
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章