zoukankan      html  css  js  c++  java
  • 303. 区域和检索

    题意

    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)
     */
  • 相关阅读:
    linux 学习随笔-shell基础知识
    linux 学习随笔-压缩和解压缩
    解析xml的4种方法详解
    集合工具类
    Map概述
    List集合概述
    Java集合框架
    Spring JdbcTemplate详解
    关于c3p0数据库连接池的简单使用
    Java通过JDBC封装通用DAO层
  • 原文地址:https://www.cnblogs.com/remly/p/10558652.html
Copyright © 2011-2022 走看看