303. 区域和检索 - 数组不可变

---恢复内容开始---

给定一个整数数组  nums,求出数组从索引 到 j  (i ≤ j) 范围内元素的总和,包含 i,  j 两点。

示例:

给定 nums = [-2, 0, 3, -5, 2, -1],求和函数为 sumRange()   -2 -2 1 -4 -2 -3 这样的为下标为前几个的和加其本身 第一位为0就是他本身之和 第二位-2+0 第三位为-2+0+3=1 

sumRange(0, 2) -> 1
sumRange(2, 5) -> -1
sumRange(0, 5) -> -3

说明:

  1. 你可以假设数组不可变。

         2.会多次调用 sumRange 方法。

 

求和:从指定位置的下标求和,即 nums[0]+nums[1]+nums[2] = sumRange(0,2)   

      一般思路为循环下标得到求和,那么nums[0]+nums[1]+nums[2] = 也相当于 num[0]+num[1]+num[2] ==前3个数的总和,所以当我们构造函数时,

      要把它变为每个下标存放的是当前的总和,这样的话构造函数为O(n)

public NumArray(int[] nums) {
     //nums[0]不变 num[i]=num[i]+前一位
for(int i = 1; i < nums.length; i++){ nums[i] =nums[i]+nums[i - 1]; } this.nums = nums; } public int sumRange(int i, int j) { if(i == 0){ return nums[j]; } return nums[j] - nums[i - 1]; }

 遍历算法

int sum=0;
for(int index=i;index<=j;index++){
     sum=sum+nums[index];      
}

 

posted @ 2018-11-30 13:58  Bockpecehhe  阅读(501)  评论(0)    收藏  举报