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

    问题

    给出一个数组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)

    代码

    class NumArray(object):
    
        def __init__(self, nums):
            """
            :type nums: List[int]
            """
            self.sums = [0] * (len(nums)+1)
            for i in range(1,len(nums)+1):
                self.sums[i] = self.sums[i-1] + nums[i-1]         
    
        def sumRange(self, i, j):
            """
            :type i: int
            :type j: int
            :rtype: int
            """
            return self.sums[j+1]-self.sums[i]
    
  • 相关阅读:
    关于虚拟机链接本地磁盘文件的问题
    javaScript学习笔记
    html学习笔记
    eclipse svn插件安装
    python学习笔记一

    hive数据处理
    WordCount实验
    暑假第六周总结
    暑假第五周总结
  • 原文地址:https://www.cnblogs.com/liaohuiqiang/p/9746139.html
Copyright © 2011-2022 走看看