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

浙公网安备 33010602011771号