经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » 编程经验 » 查看文章
303. Range Sum Query - Immutable
来源:cnblogs  作者:PilgrimHui  时间:2018/10/8 8:49:49  对本文有异议

问题

给出一个数组nums和下标i和j,求下标i到下标j之间的数组元素和,这个求和会被调用多次。

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

思路

直接遍历累加是O(n)的时间,因为这个求和会被调用多次,所以时间消耗很大。

可以先计算好一个数组sums,sums[i]表示下标i结尾的数组元素和,每次要计算时直接\(sums[j]-sums[i-1]\)即可得到下标i到下标j之间的数组元素和。

考虑i等于0时,要计算的sums[i-1]中下标i-1为-1,所以我们用sums[i]表示下标i-1结尾的数组元素和,每次计算时用\(sums[j+1]-sums[i]\)

初始化:时间复杂度O(n),空间复杂度O(n)
每次调用:时间复杂度O(1),空间复杂度O(1)

代码

  1. class NumArray(object):
  2. def __init__(self, nums):
  3. """
  4. :type nums: List[int]
  5. """
  6. self.sums = [0] * (len(nums)+1)
  7. for i in range(1,len(nums)+1):
  8. self.sums[i] = self.sums[i-1] + nums[i-1]
  9. def sumRange(self, i, j):
  10. """
  11. :type i: int
  12. :type j: int
  13. :rtype: int
  14. """
  15. return self.sums[j+1]-self.sums[i]
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号