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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)