leedcode-区域和检索 - 数组不可变

自己写的,耗时很长

class NumArray:
    def __init__(self, nums: List[int]):
        # 初始化NumArray类,接收一个整数列表nums作为参数
        self.nums = nums  # 将传入的nums列表存储为对象的属性

    def sumRange(self, left: int, right: int) -> int:
        """
        计算指定范围内元素的总和

        参数:
            left: int - 范围的左边界
            right: int - 范围的右边界

        返回值:
            int - 指定范围内元素的总和
        """
        total_sum = 0  # 初始化总和为0
        for i in range(left, right + 1):  # 遍历范围内的索引
            total_sum += self.nums[i]  # 将范围内每个元素的值加到总和中
        return total_sum  # 返回计算出的总和

 preSum算法,求指定区间的和:

from typing import List

class NumArray:
    def __init__(self, nums: List[int]):
        """
        初始化 NumArray 类,预处理输入列表以支持快速检索范围内元素的总和。

        参数:
            nums: List[int] - 输入的整数列表

        成员变量:
            nums: List[int] - 存储输入的整数列表
            preSum: List[int] - 存储累积和数组,preSum[i] 存储前 i 个元素的累积和
        """
        self.nums = nums  # 存储输入的整数列表
        n = len(nums)
        self.preSum = [0] * (n + 1)  # 初始化累积和数组,长度为 n+1
        for i in range(n):
            # 计算前 i 个元素的累积和,存储在 preSum[i+1] 中
            self.preSum[i + 1] = self.preSum[i] + nums[i]

    def sumRange(self, left: int, right: int) -> int:
        """
        计算指定范围内元素的总和。

        参数:
            left: int - 范围的左边界
            right: int - 范围的右边界

        返回值:
            int - 指定范围内元素的总和
        """
        # 计算范围 [0, right] 的累积和与范围 [0, left-1] 的累积和的差
        # 即可得到范围 [left, right] 的元素总和
        return self.preSum[right + 1] - self.preSum[left]

# 测试代码
nums = [1, 2, 3, 4, 5]
numArray = NumArray(nums)
print(numArray.sumRange(1, 3))  # 输出 9

 

posted @ 2024-04-01 13:51  Junior_bond  阅读(16)  评论(0)    收藏  举报