解题思路:
求解区间内元素的和。由于要多次查询,最朴素的方法是每次查询依次遍历集合中的所有元素并求和。但显然多次查询区间有交叉的话会重复计算某些新元素。由于区间是连续的,考虑保存中间的结果。下次查询就节省了很多重复计算。
实现代码:
class NumArray {
public:
vector<int> arr;
NumArray(vector<int> nums) {
arr.push_back(0);
for(int i=0;i<nums.size();i++)
arr.push_back(nums[i]+arr[i]);
}
int sumRange(int i, int j) {
return arr[j+1]-arr[i];
}
};