题意
1.题目很明确,求i,j两点范围内的元素总和。
2.先初始化NumArray类,然后一直调用sumRange()函数。
分析
1.如果再sumRange()函数内用循环写累加,由于会多次调用sumRange()函数,导致超时。
2.用动态规划的思想,在类初始化时用一个新的数组arr来存储累加的结果。
nums=[-2,0,3,-5,2,-1]
arr =[-2,-2,1,-4,-2,-3]
这么看来 i,j 区间内元素的和就是arr[j] - arr[i-1]
实现
/** * @param {number[]} nums */ var NumArray = function(nums) { this.arr=[]; var sum=0; for(let i=0;i<nums.length;i++){ sum+=nums[i]; this.arr.push(sum); } }; /** * @param {number} i * @param {number} j * @return {number} */ NumArray.prototype.sumRange = function(i, j) { //console.log(this.arr) return i===0?this.arr[j]:this.arr[j]-this.arr[i-1]; }; /** * Your NumArray object will be instantiated and called as such: * var obj = Object.create(NumArray).createNew(nums) * var param_1 = obj.sumRange(i,j) */