JavaScript|LeetCode|动态规划|303.区域和检索-数组不可变

法1:动态规划
看了题解
想法:

  1. 索引 i 到 j 的元素和(含 i、j)= (索引 0 到 j 的元素和)-(索引 0 到 i - 1 的元素和)
  2. 用一个数组sum保存索引 0 到 j 的元素和(j = 0, 1, 2, ……, n - 1)
  3. 若 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) 
*/
发布了30 篇原创文章 · 获赞 0 · 访问量 714
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览