题目描述:给定一个整数数组 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
算法思路:
使用vector来存放前i个元素的和,例如vector[i]存放着从nums[0]起始到nums[i]的元素和,求索引i到j之间的元素和只需要vector[j]-vector[i]即可
class NumArray {
public:
NumArray(vector<int> &nums) {
accu.push_back(0);//添加基元素
for (int num : nums)
accu.push_back(accu.back() + num);
}
int sumRange(int i, int j) {
return accu[j + 1] - accu[i];//vector中第一个元素是0,所以j+1
}
private:
vector<int> accu;
};