使用场景

- 一般思路是通过
for
循环,这样子时间复杂度为O(n)
- 使用前缀和技巧,将
sumRange
函数的时间复杂度降为O(1)
,说白了就是不要在sumRange
里面用 for 循环,核心思路是我们 new 一个新的数组preSum
出来,preSum[i]
记录nums[0..i-1]
的累加和

/**
* @param {number[]} nums
*/
var NumArray = function(nums) {
// preSum[0] = 0,便于计算累加和
let preSum = new Array(nums.length + 1).fill(0)
// 计算 nums 的累加和
for (let i = 1
preSum[i] = preSum[i - 1] + nums[i - 1]
}
this.preSum = preSum
}
/**
* @param {number} left
* @param {number} right
* @return {number}
*/
NumArray.prototype.sumRange = function(left, right) {
return this.preSum[right + 1] - this.preSum[left]
}