303. 区域和检索 - 数组不可变 - 力扣(LeetCode)
说明:
- 你可以假设数组不可变。
- 会多次调用 sumRange 方法。
多次调用的意思就是最好计算过的值存储起来。
或者先计算好(数组不可变),调用的时候直接返回就行。
class NumArray {
public:
NumArray(vector<int>& nums) {
preSum = nums;
for(int i = 1; i < preSum.size(); ++i) preSum[i] += preSum[i-1]; //计算前缀和
}
int sumRange(int i, int j) {
if(i == 0) return preSum[j];
return preSum[j] - preSum[i-1];
}
private:
vector<int> preSum;
};
如果可以直接在nums上面进行修改:
class NumArray {
public:
NumArray(vector<int>& nums) {
p = &nums;
for(int i = 1; i < nums.size(); ++i) nums[i] += nums[i-1]; //计算前缀和
}
int sumRange(int i, int j) {
if(i == 0) return (*p)[j];
return (*p)[j] - (*p)[i-1];
}
private:
vector<int>* p;
};