问题描述:
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
Note:
You may assume that the array does not change.
There are many calls to sumRange function.
分析:这道题比较简单,就是在预处理阶段,在每个点上存储从0到当前点的值,这样当返回某范围时,就直接nums[j]-nums[i]即可,当然了,要注意是否越界。
另外好像不能直接去修改nums的值,只能再另外开辟一块空间。
代码如下:
public class NumArray {
int[] vals;
public NumArray(int[] nums) {
vals = new int[nums.length];
if(vals.length == 0)
return;
vals[0] = nums[0];
for(int i = 1;i<nums.length;i++){
vals[i] = vals[i-1] + nums[i];
}
}
public int sumRange(int i, int j) {
if(vals.length == 0)
return 0;
if(j > vals.length-1)a
j = vals.length-1;
if(i <= 0)
return vals[j];
return vals[j]-vals[i-1];
}
}
// Your NumArray object will be instantiated and called as such:
// NumArray numArray = new NumArray(nums);
// numArray.sumRange(0, 1);
// numArray.sumRange(1, 2);