leetcode:303. 区域和检索 - 数组不可变
解题思路:
- new 一个新的数组
preSum
出来,preSum[i]
记录nums[0..i-1]
的累加和 ,让preSum[0]=0- nums = [1,3,5,1,-2,-3] => preSum = [0,1,4,9,10,8,5]
- 如果我要求[1,4]内的所有和:也就是3+5+1-2 = 7 ,那么在preSum中就是preSum[5]-preSum[1] 也就是8-1=7 即可得出。只用一次减法,时间复杂度为0(1)
var NumArray = function(nums) {
const preSum = new Array(nums.length + 1)
preSum[0] = 0
for (let i = 0; i < nums.length; i++) {
preSum[i+1] = preSum[i] + nums[i]
}
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]
};