1.题目详情
给定一个整数数组 nums,求出数组从索引 i 到 j(i ≤ j)范围内元素的总和,包含 i、j 两点。
实现 NumArray 类:
NumArray(int[] nums) 使用数组 nums 初始化对象
int sumRange(int i, int j) 返回数组 nums 从索引 i 到 j(i ≤ j)范围内元素的总和,包含 i、j 两点(也就是 sum(nums[i], nums[i + 1], … , nums[j]))
2.解题思路
思路来源于力扣
这是一道前缀和的裸题。
当需要我们求「某一段」区域的和的时候,我们要很自然的想到「前缀和」。
前缀和的作用就是为了帮助我们快速求某一段的和,是「差分」的逆运算。
前缀和数组 sum 的每一位记录的是当前位置距离起点位置,这连续一段的和区间和。
因此当我们要求特定的一段 [i,j] 的区域和的时候,可以直接利用前缀和数组快速求解:ans = sum[j] - sum[i - 1]。
3.代码实现
class NumArray:
def __init__(self, nums: List[int]):
#self.arr=nums
self.arr=[0]
for i in range(len(nums)):
self.arr.append(self.arr[i]+nums[i])
def sumRange(self, i: int, j: int) -> int:
return self.arr[j+1]-self.arr[i]
# Your NumArray object will be instantiated and called as such:
# obj = NumArray(nums)
# param_1 = obj.sumRange(i,j)
4.知识点
了解前缀和