Question
Given an integer array nums, find the sum of the elements between indices i and j (i ≤ j), inclusive.
Note:
1. You may assume that the array does not change.
2. There are many calls to sumRange function.给出一个整数数组,找出在i到j之间的元素总和(i<=j,包含i和j)。数组不会改变,并且会多次调用sumRange函数
Example
Given nums = [-2, 0, 3, -5, 2, -1]
sumRange(0, 2) -> 1
sumRange(2, 5) -> -1
sumRange(0, 5) -> -3
Solution
动态规划解。既然会多次调用,只需要记下前i个元素的总和即可。定义dp[i]:前i个元素的总和。递推式:dp[i] = dp[i - 1] + nums[i],在计算i到j的元素总和只需要将两个相减即可 dp[j] - dp[i] + nums[i] (这里考虑i为0的情况,所以不减去dp[i - 1])
class NumArray(object): def __init__(self, nums): """ :type nums: List[int] """ self.nums = nums self.dp = [0] * len(nums) for index in range(len(nums)): if index == 0: self.dp[index] = nums[index] else: self.dp[index] = nums[index] + self.dp[index - 1] def sumRange(self, i, j): """ :type i: int :type j: int :rtype: int """ return self.dp[j] - self.dp[i - 1] + self.nums[i]