leetcode 303. 区域和检索 - 数组不可变 python

题目描述:

题解:

思路:前缀和

1.在init操作中,创建一个numsum数组,numsum[i]=nums[0]+nums[1]+...+nums[i]

2.在sumRange操作中:

<1>如果left=0,则nums[left]+nums[left+1]+...+nums[right]对应right处的前缀和,直接返回numsum[right]即可。

<2>如果left=right,则直接返回nums[left]即可,通过numsum[right]-numsum[right-1]得到。

<3>numsum[right]-numsum[left-1]对应nums[left]到nums[right]之和。

class NumArray(object):

    def __init__(self, nums):
        n = len(nums)
        self.numsum = [0]*n
        self.numsum[0] = nums[0]
        for i in range(1,n):
            self.numsum[i] = self.numsum[i-1]+nums[i]

    def sumRange(self, left, right):
        lenn = len(self.numsum)
        if left==0:
            return self.numsum[right]
        elif left==right:
            return self.numsum[right]-self.numsum[right-1]
        return self.numsum[right]-self.numsum[left-1]

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值