首页 > 其他 > 详细

303. Range Sum Query - Immutable

时间:2021-03-02 14:41:34      阅读:12      评论:0      收藏:0      [点我收藏+]

仅供自己学习

 

思路:

这一道题可以很简单很暴力的算出来,既然求下标为j之前所有元素之和,那么第一时间就会想到是不是可以for循环这样一个一个加起来然后返回,这样是没错,但是有个问题,会超时。

题目提到会多次调用sumRange这个函数,如果每次都是O(n)的for循环 多调用几次那么时间复杂度会很高。

那么我们主要的任务就是降低sumRange这个函数的时间复杂度,如果我们能有办法存储所有J下标之前的元素的和,那么我们在sumRange函数直接调用,那么就是O(1)的时间复杂度。因此我们在NumArray这个函数中,先把J下标之前的和存储起来,用一个vector,而我们只需要一个nums.size()大小的for循环,根据公式

sums[J+1]=sums[J]+nums[i]即可。

 

代码:

 1 class NumArray {
 2 public:
 3 vector<int> sums;
 4     NumArray(vector<int>& nums) {
 5         sums.resize(nums.size()+1);
 6         for(int i=0;i<nums.size();++i){
 7               sums[i+1]=sum[i]+nums[i];   
 8         }
 9 
10     }
11     
12     int sumRange(int i, int j) {
13         return sums[j+1]-sums[i];
14     }
15 };
16 
17 /**
18  * Your NumArray object will be instantiated and called as such:
19  * NumArray* obj = new NumArray(nums);
20  * int param_1 = obj->sumRange(i,j);
21  */

 

303. Range Sum Query - Immutable

原文:https://www.cnblogs.com/Mrsdwang/p/14468191.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!