区域和检索-数组不可变
该题目最简单想的一定是存储数组,然后每次调用算法时,遍历相加即可,但是有一个问题,缺少对计算结果的记录,导致每次都得重新计算,这会降低效率,所以改进便是通过将每个索引的前缀和计算保存,这样就不需要每次都计算求和,而是进行索引和相减即可,这样通过一次求和记录,使得未来调用不用重复计算求和,降低了时间复杂度。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| class NumArray { public int [] arr;
public NumArray(int[] nums) { arr = new int[nums.length]; for(int i =0;i<nums.length;i++){ if(i==0){ arr[i] = nums[i]; }else{ arr[i] = arr[i-1]+nums[i]; } }
} public int sumRange(int left, int right) { if(left==0){ return arr[right]; }else{ return arr[right]-arr[left-1]; } } }
/** * Your NumArray object will be instantiated and called as such: * NumArray obj = new NumArray(nums); * int param_1 = obj.sumRange(left,right); */
|