python 区域和检索_yiduobo的每日leetcode 303.区域和检索

31898d7399007492f5c35610d3d11323.png

祖传的手艺不想丢了,所以按顺序写一个leetcode的题解。计划每日两题,争取不卡题吧

303.区域和检索https://leetcode-cn.com/problems/range-sum-query-immutable/

很经典的题目,做法是维护前缀和,即

sum_list[index] = nums[0] + nums[1] + ... + nums[index]

那么对于求解sumRange(x, y),我们就可以使用sum_list[y] - sum_list[x-1]来得出答案了,理由是

sum_list[x - 1] = nums[0] + nums[1] + ... + nums[x - 1]

sum_list[y] = nums[0] + nums[1] + ... + nums[x - 1] + nums[x] + ... + nums[y]

两式相减,0到x - 1的部分抵消掉之后剩下的就是x到y的和了

需要特别注意x = 0的情况,此时直接返回sum_list[y]即可

最后附上python代码:

class NumArray(object):

    def __init__(self, nums):
        """
        :type nums: List[int]
        """
        self.sum_list = nums[:]
        for index in range(1, len(nums)):
            self.sum_list[index] += self.sum_list[index - 1]

    def sumRange(self, i, j):
        """
        :type i: int
        :type j: int
        :rtype: int
        """
        if i == 0:
            return self.sum_list[j]
        else:
            return self.sum_list[j] - self.sum_list[i - 1]


# Your NumArray object will be instantiated and called as such:
# obj = NumArray(nums)
# param_1 = obj.sumRange(i,j)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值