题目描述:
给定一个整数数组 nums,求出数组从索引 i 到 j (i ≤ j) 范围内元素的总和,包含 i, j 两点。
示例:
给定 nums = [-2, 0, 3, -5, 2, -1],求和函数为 sumRange()
sumRange(0, 2) -> 1
sumRange(2, 5) -> -1
sumRange(0, 5) -> -3
说明:
你可以假设数组不可变。
会多次调用 sumRange 方法。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/range-sum-query-immutable
代码实现:
1 class NumArray: 2 3 def __init__(self, nums): 4 self.nums = nums 5 6 def sumRange(self, i, j): 7 return sum(self.nums[i:j + 1]) 8 9 10 print("-------------测试Numarray-----------") 11 nums = [-2, 0, 3, -5, 2, -1] 12 obj = NumArray(nums) 13 print(obj.sumRange(0, 2)) 14 15 16 class NumArray1: 17 18 def __init__(self, nums): 19 self.nums = nums 20 21 self.sums = [0] 22 for i in range(len(nums)): 23 self.sums.append(nums[i] + self.sums[i]) 24 25 def sumRange(self, i, j): 26 return self.sums[j + 1] - self.sums[i] 27 28 29 print("-------------测试Numarray1-----------") 30 nums = [-2, 0, 3, -5, 2, -1] 31 obj = NumArray1(nums) 32 print(obj.sumRange(0, 2))
输出:
-------------测试Numarray----------- 1 -------------测试Numarray1----------- 1
总结:方法1,使用切片加求和。因为题目中说明要多次调用sumRange(),故方法1中使用切片方法会增加空间复杂度,不推荐。
方法2,动态依次求出各元素累加之和,然后sumRange()中两元素之差即为索引范围内之和。空间复杂度小。利用append方法将各元素之和依次存入sums列表中。