zoukankan      html  css  js  c++  java
  • leetcode-303-Range Sum Query

    题目描述:

    Given an integer array nums, find the sum of the elements between indices i and j (i ≤ j), inclusive.

    Example:

    Given nums = [-2, 0, 3, -5, 2, -1]
    
    sumRange(0, 2) -> 1
    sumRange(2, 5) -> -1
    sumRange(0, 5) -> -3
    

     

    Note:

    1. You may assume that the array does not change.
    2. There are many calls to sumRange function.

     

    要完成的函数:

    class NumArray 
    {
        public:
            NumArray(vector<int> nums) 
            {
    
            }
    
            int sumRange(int i, int j) 
            {
                
            }
    };
    
    /**
     * Your NumArray object will be instantiated and called as such:
     * NumArray obj = new NumArray(nums);
     * int param_1 = obj.sumRange(i,j);
     */
    

    说明:

    1、这道题给了一个vector和两个index,i 和 j ,要求计算vector中的[ i , j ]之间的数的和。要求尽量少调用sumRange函数。

    2、这道题很容易,如果不要求少调用sumRange函数的话,我们常规思路,做一个循环知道总和就结束了这道题。

    但是现在要求少调用,比如一个初始化建立过程,后面跟着几百个调用sumRange的过程,那多次重复计算,还每次都是这几个数,那就有点浪费时间了。

    所以我们可以在初始化的时候,就计算好总和,后面频繁调用的时候就不用每次都重复计算。

    代码如下:(附详解)

    class NumArray 
    {
        public:
            NumArray(vector<int> nums) 
            {
                int sum2=0;
                for(int i=0;i<nums.size();i++)
                {
                    sum2+=nums[i];//从最开始到i这个位置,所有数的总和
                    sum1.push_back(sum2);//总和插入到sum1中
                }
            }
    
            int sumRange(int i, int j) 
            {
                return sum1[j]-sum1[i-1];//减一下就知道结果。
            }
        private:
            vector<int>sum1;//私有变量
    };
    

    上述代码的时间复杂度,初始化建立时O(n),sumRange的时间复杂度是O(1),大大减少了多次调用sumRange函数所需的时间。

    这有点像是训练一个神经网络模型,训练时花费很多时间,但实际要用时输入参数立马就知道结果。而普通的knn算法,实际要用时还是要遍历一遍所有数据,很浪费时间。

    上述代码实测28ms,beats 99.90% of cpp submissions。

  • 相关阅读:
    Jquery事件
    基础:装箱和拆箱...
    navicat编辑表的作用
    谷歌浏览器preview展示问题
    @Scheduled并行执行
    spring异步执行方法线程池的配置
    dubbo的ExceptionFilter异常处理
    dubbo异常处理
    idea设置启动jvm参数
    前后端分离走本地代码Charles的使用
  • 原文地址:https://www.cnblogs.com/chenjx85/p/9121457.html
Copyright © 2011-2022 走看看