给定一个整数数组 nums,求出数组从索引 i 到 j (i ≤ j) 范围内元素的总和,包含 i, j 两点。
update(i, val) 函数可以通过将下标为 i 的数值更新为 val,从而对数列进行修改。
利用树状数组实现。
from typing import *
class NumArray:
def __init__(self, nums: List[int]):
self.n = len(nums)
self.c = [0] * (self.n + 2)
self.nums = nums
for i, val in enumerate(nums):
self.add_val(i + 1, val)
def lowbit(self, i):
return i & (-i)
def add_val(self, idx, val):
while idx <= self.n:
self.c[idx] += val
idx += self.lowbit(idx)
def get_sum(self, i):
tem = 0
while i > 0:
tem += self.c[i]
i -= self.lowbit(i)
return tem
def update(self, i: int, val: int) -> None:
self.add_val(i + 1, val - self.nums[i])
self.nums[i] = val
def sumRange(self, i: int, j: int) -> int:
return self.get_sum(j + 1) - self.get_sum(i)