【Python3】【力扣题】303. 区域和检索 - 数组不可变

【力扣题】题目描述:

【Python3】【力扣题】303. 区域和检索 - 数组不可变_第1张图片

【Python3】代码:

1、解题思路:从列表中获取指定下标的所有元素,求和。

知识点:列表[start:end]:切片。从列表中获取起始下标start(含)到结束下标end(不含)的元素。

              sum(...):求和,返回一个数值。

class NumArray:

    def __init__(self, nums: List[int]):
        self.nums = nums

    def sumRange(self, left: int, right: int) -> int:
        return sum(self.nums[left:right+1])

# Your NumArray object will be instantiated and called as such:
# obj = NumArray(nums)
# param_1 = obj.sumRange(left,right)

2、解题思路:一个新列表,每个下标记录数组中从0到该下标所有元素的和,指定下标范围的和只需计算结束下标对应的和减去起始下标之前的和。例如:从i到j的和,计算从0到j的和减去从0到i-1的和。

知识点:[0]:列表中只有一个元素0。

               列表.append(...):往列表中添加元素。

               列表[-1]:从列表中获取最后一个元素。

               列表[num]:从列表中获取指定下标num对应的元素。

注解:新列表中第一个元素是0,第二个元素开始才依次是数组中从0到n元素和。

class NumArray:

    def __init__(self, nums: List[int]):
        self.total = [0]

        for x in nums:
            self.total.append(self.total[-1] + x)

    def sumRange(self, left: int, right: int) -> int:
        return self.total[right+1] - self.total[left]

# Your NumArray object will be instantiated and called as such:
# obj = NumArray(nums)
# param_1 = obj.sumRange(left,right)

3、解题思路:类似2,用itertools模块accumulate(),每个下标记录数组中从0到该下标所有元素的和。

知识点:itertools.accumulate(可迭代对象):返回一个迭代器,累加和。

              list(...):转为列表。

注解:accumulate()返回的迭代器,从第一个元素开始依次是数组中从0到n元素和。

class NumArray:

    def __init__(self, nums: List[int]):
        from itertools import accumulate
        self.total = list(accumulate(nums))

    def sumRange(self, left: int, right: int) -> int:
        return self.total[right] if left == 0 else self.total[right] - self.total[left-1]

# Your NumArray object will be instantiated and called as such:
# obj = NumArray(nums)
# param_1 = obj.sumRange(left,right)

 

你可能感兴趣的:(力扣题,leetcode,python)