题目:
给定一个整数数组 nums
,求出数组从索引 i
到j (i ≤ j)
范围内元素的总和,包含 i, j
两点。
示例:
给定nums = [-2, 0, 3, -5, 2, -1]
,求和函数为 sumRange()
sumRange(0, 2) -> 1
sumRange(2, 5) -> -1
sumRange(0, 5) -> -3
说明:
你可以假设数组不可变。
会多次调用 sumRange 方法。
思路:
把求和写到类的构造函数,然后从索引 i
到j (i ≤ j)
范围内元素的总和可以转化为:从0到j
范围的总和减去从0到i-1
范围的总和。
代码:
class NumArray {
public:
vector<int> sum;
NumArray(vector<int>& nums) {
if(nums.size()==0) return;
sum.push_back(nums[0]);
for(auto beg = nums.begin()+1; beg != nums.end(); ++beg)
{
*beg += *(beg - 1);
sum.push_back(*beg);
}
}
int sumRange(int i, int j) {
if(i==0) return sum[j];
else return sum[j]-sum[i-1];
}
};
/**
* Your NumArray object will be instantiated and called as such:
* NumArray* obj = new NumArray(nums);
* int param_1 = obj->sumRange(i,j);
*/