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.
思路: 返回列表指定区间的和,最开始的思路很简单,直接利用列表切片求和,不过这种方法因为检测时要多次调用sumRange(),所以速度很慢,要一千多ms.
class NumArray:
def __init__(self, nums):
"""
:type nums: List[int]
"""
self.nums = nums
def sumRange(self, i, j):
"""
:type i: int
:type j: int
:rtype: int
"""
return sum(self.nums[i:j+1])
于是换个思路,在列表前n个数的和存储在第n个位置上,这样速度快了很多.
class NumArray:
def __init__(self, nums):
"""
:type nums: List[int]
"""
self.nums = nums
for i in range(1,len(nums)):
nums[i] += nums[i-1]
def sumRange(self, i, j):
"""
:type i: int
:type j: int
:rtype: int
"""
return self.nums[j]-self.nums[i-1] if i else self.nums[j]

本文介绍了一种优化区间和查询的方法,通过预计算列表前缀和,显著提高了查询速度。初始思路采用列表切片求和,但效率低下。改进后的方法在初始化时计算并存储前缀和,后续查询只需简单计算即可得到结果。
690

被折叠的 条评论
为什么被折叠?



