给定一个整数数组 nums,计算出从第 i 个元素到第 j 个元素的和 ( i ≤ j ),包括 nums[ i ] 和 nums[ j ]
例子:
const nums = Object.freeze([-2, 0, 3, -5, 2, -1]);
sumRange(0, 2) -> 1
sumRange(2, 5) -> -1
sumRange(0, 5) -> -3
假定数组的值不会改变(如上面代码,nums 因为 Object.freeze 的缘故可读不可写)
sumRange 可能会被使用很多次,求不同范围的值
数组可能规模很大(比如超过 10000 个数),注意运行时间
代码实现:
class Num{
constructor(arr){
this.arr = Object.freeze(arr);
this.sumTab = null;
}
sunRange(i,j) {
if(!this.sumTab){
let sum = 0;
let sumTab = [0];
this.arr.forEach(v => {
sum += v;
sumTab.push(sum);
})
this.sumTab = sumTab;
}
const len = this.arr.length;
if(i<len && i>-1 && j<len && j>-1){
return this.sumTab[j+1] - this.sumTab[i];
}else{
console.log('error');
}
}
}
var test =new Num([1,2,3,4,5,6]);
var sunRange = test.sunRange.bind(test);
sunRange(0,3); //输出10