303. Range Sum Query
来源:互联网 发布:淘宝店怎么发布宝贝 编辑:程序博客网 时间:2024/05/17 06:07
1.题目
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:
You may assume that the array does not change.
There are many calls to sumRange function.
2.分析
不可变数组范围求和,首先大家都比较容易想到是直接遍历数组,求和,反正时间复杂度也就是O(n),但是这道题好像对时间复杂度要求高,所以下面的note里面它多次提到sumRange 会被多次调用,如果数组长度很长,而你反复去掉用这个函数,效率就会很低,那么怎么提高查询效率呢,我前面做的工作后面为什么还要再重复做呢,能不能把每一步的结果保存下来呢,从源头将数据求和,这样遍历的时候,效率将大大提高。
3.解题
我的解法:
public class NumArray {int[] result;public NumArray(int[] nums) { result = nums; // index为i时,记录下当前的0-i的总和 for(int i=1;i<result.length;i++){ result[i] += result[i-1]; // 减少了后续大量的遍历 }}public int sumRange(int i, int j) { // 边界处理 if(result==null){ return 0; } if(i==0){ return result[j]; } return result[j]-result[i-1];}}
4.总结
感觉这道题很像动态规划里面的思想,每一步之后,我都记录下这一步结果,然后后续工作将是在这一步结果的基础上进行,而这里面范围求和,是在原本每一个0-i(i在0-length-1之间)已求和的基础上进行范围求和,所以就会大大降低求和工作量。
阅读全文
0 0
- 303. Range Sum Query
- 303. Range Sum Query
- 303. Range Sum Query
- 303. Range Sum Query
- 303. Range Sum Query
- 303. Range Sum Query
- 303. Range Sum Query
- 303. Range Sum Query
- 303. Range Sum Query
- 303. Range Sum Query
- 303. Range Sum Query
- 303. Range Sum Query
- 303. Range Sum Query
- 303. Range Sum Query
- 303. Range Sum Query
- 303. Range Sum Query
- 303. Range Sum Query
- 303. Range Sum Query
- 8.7 WJ的逃离escape 2537
- 【linux shell】 find 常用选项
- JZOJ 5235. 【NOIP2017模拟8.7A组】好的排列
- spring资源访问
- HTML CSS:Getting Serious with HTML
- 303. Range Sum Query
- 安装NVIDIA显卡驱动+CUDA+CUDNN+NVCAFFE的问题总结
- bzoj 2829 计算几何
- 8.7 约数个数shlqsh 2535
- 堆排序
- vs2015编译mysql-connector-cpp-1.1.9
- Thread的join方法
- USACO JAN14 奶牛冰壶运动 凸包+判定
- 11-SpringBoot——Spring MVC基础-常用注解