题目
我的题解
解法一:傻瓜解法
class NumArray {
private int[] result;
public NumArray(int[] nums) {
this.result = nums;
}
public int sumRange(int left, int right) {
int sum = 0;
for (int i = left; i < right; i++) {
sum += result[i];
}
return sum;
}
}
解法二:前缀和
一次性计算出所有的和,然后根据题目选择区间进行计算。
class NumArray {
private int[] preSum;
public NumArray(int[] nums) {
preSum = new int[nums.length + 1];
preSum[0] = 0;
for (int i = 1; i < nums.length + 1; i++) {
preSum[i] = preSum[i - 1] + nums[i - 1];
}
}
public int sumRange(int left, int right) {
return preSum[right + 1] - preSum[left];
}
}
总结
- 当重复计算量大时,可考虑将已经计算过的数据存储,后期通过逻辑一次性调出并计算,减少重复计算。