使用场景

- 一般思路是通过
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]
}