Given an integer array nums, find the sum of the elements between indices i and j (i ≤ j), inclusive.
Example:
Given nums = [-2, 0, 3, -5, 2, -1]
sumRange(0, 2) -> 1
sumRange(2, 5) -> -1
sumRange(0, 5) -> -3
让求数组中 i 到 j 的数的和,注意点是题目中说会调用很多次,也就是说不能每次都重新计算和
思路:
因为会调用很多次,所以要把每次计算和的复杂度控制在O(1),要是事先保存所有的和,需要O(N2)复杂度
假如从0到 i 的和保存在dp里,那么 i 到 j 的和就=dp[j] - dp[i - 1], i = 0的时候直接就dp[j]
class NumArray {
int[] dp;
public NumArray(int[] nums) {
dp = new int[nums.length];
if (nums.length > 0) {
dp[0] = nums[0];
}
for (int i = 1; i < nums.length; i++) {
dp[i] += nums[i] + dp[i - 1];
}
}
public int sumRange(int i, int j) {
if (i == 0) {
return dp[j];
}
return dp[j] - dp[i - 1];
}
}