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 @   Junior_bond  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示