题目:
给定一个整数数组 nums,处理以下类型的多个查询:
计算索引 left 和 right (包含 left 和 right)之间的 nums 元素的 和 ,其中 left <= right
分析:
给定一个数组以及区间,根据区间要求求出数组该区间内值的和
思路在于求区间和,可以利用下面公式:
也就是说,求 i-j的范围,可以利用前 j 项和 减去 前 i -1项和,所以我们会在第一次计算中,先求出每个前项和,后续根据区间直接调用就行
解析:
class NumArray {
public:
vector<int>sums;
NumArray(vector<int>& nums) {
int n = nums.size();
//n+1是因为sms【0】=0,方便0-n这种区间计算
sums.resize(n + 1);
for (int i = 0; i < n; ++i)
{
sums[i + 1] = sums[i] + nums[i];
}
}
int sumRange(int left, int right) {
return sums[right+1] - sums[left];
}
};
补充:
对于区域和,可以利用前缀和方法!