一、题目简述
给定一个数组nums,计算下标在i,j(
i≤j
)之间的元素之和。
示例:
- Given nums = [-2, 0, 3, -5, 2, -1]
- sumRange(0, 2) -> 1
- sumRange(2, 5) -> -1
- sumRange(0, 5) -> -3
注意:
- 假设数组不会改变;
- 需要调用sumRange函数多次。
二、编程思路
给定数组nums,求下标在i,j之间的元素和。
- 最简单的想法是直接计算,但是根据题目所给出提示,sumRange函数要调用多次,函数多次调用会造成大量重复计算。
- 另外一种思路就是使用数组sum,其中
sum[k]=∑j=k−1j=0num[j]
。则,
∑k=ik=jnums[k]=sum[j+1]−sum[i]
三、程序设计
class NumArray {
public:
vector<int> sum;
NumArray(vector<int> nums) {
int tmp=0;
this->sum.push_back(0);
for(int i=0;i<nums.size();i++){
tmp+=nums[i];
this->sum.push_back(tmp);
}
}
int sumRange(int i, int j) {
return sum[j+1]-sum[i];
}
};
四、编程心得
本题相对简单,使用积分数组简化问题。