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.
解:
想了半天怎么动态规划(打表)将sumRange在初始化的时候存到一个二元数组,怎么想都是O( n2)
其实有可以O(n)初始化O(1)查询的解法
int[] nums;
public NumArray(int[] nums) {
for(int i = 1; i < nums.length; 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];
}
本文介绍了一种针对固定数组的区间求和问题的高效算法,该算法能在O(n)的时间复杂度内完成初始化,并能在O(1)的时间复杂度内查询任意两个索引之间的元素之和。通过预先计算累积和的方式,避免了重复计算同一数组段的问题。
660

被折叠的 条评论
为什么被折叠?



