法1:动态规划
看了题解
想法:
- 索引 i 到 j 的元素和(含 i、j)= (索引 0 到 j 的元素和)-(索引 0 到 i - 1 的元素和)
- 用一个数组sum保存索引 0 到 j 的元素和(j = 0, 1, 2, ……, n - 1)
- 若 i == 0,则直接返回sum[ j ]
/**
* @param {number[]} nums
*/
var NumArray = function(nums) {
this.constr = function(nums) {
var i = 0, sum = [];
sum[0] = nums[0];
for(i = 1; i < nums.length; i++) {
sum[i] = nums[i] + sum[i - 1]; // [0, i]
}
return sum;
};
this.nums = nums;
this.sum = this.constr(this.nums); // 每个对象都有该属性
};
// 也可这样添加构造sum的方法
// NumArray.prototype.constr = function(nums) {
// var i = 0, sum = [];
// sum[0] = nums[0];
// for(i = 1; i < nums.length; i++) {
// sum[i] = nums[i] + sum[i - 1]; // [0, i]
// }
// return sum;
// }
/**
* @param {number} i
* @param {number} j
* @return {number}
*/
NumArray.prototype.sumRange = function(i, j) {
if(i == 0) {
return this.sum[j];
}
else {
return this.sum[j] - this.sum[i - 1];
}
};
/**
* Your NumArray object will be instantiated and called as such:
* var obj = new NumArray(nums)
* var param_1 = obj.sumRange(i,j)
*/