每日一题303-区域和检索 - 数组不可变

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.知识点

了解前缀和

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值