Maktub_Wiki Maktub_Wiki
主站 (opens new window)
  • 服务搭建
  • 网络服务
  • 开源框架
  • 操作系统
  • iOS/MacOS
  • 算法导论(Python)
  • Leetcode
  • 线性代数
主站 (opens new window)
  • 服务搭建
  • 网络服务
  • 开源框架
  • 操作系统
  • iOS/MacOS
  • 算法导论(Python)
  • Leetcode
  • 线性代数
  • 数据结构

    • 树状数组
      • 位存储
      • 并查集
    • 算法

      • Floyd算法
      • Dijkstra算法
      • Bellman-Ford算法
      • Prim算法
      • Kruskal算法
      • KMP算法
    • Leetcode
    • 数据结构
    Maktub_小明
    2024-01-03
    目录

    树状数组

    # 作用

    1. 单点修改
    2. 区间查询

    # 代码模版

    from typing import List
    class NumArray:
    
        def __init__(self, nums: List[int]):
            self.nums = nums
            self.preNums = [0]*(len(nums)+1)
            for i in range(len(nums)):
                self.add(i+1,nums[i])
    
        # 从左到右获取第一个1
        def lowbit(self,index:int)->int:
            return index & -index
            
        # 生成数组
        def add(self,index:int, val:int):
            while index < len(self.preNums):
                self.preNums[index] += val
                index+= self.lowbit(index)
    
        # 计算和
        def preSum(self,index:int)->int:
            result = 0 
            while index:
                result += self.preNums[index]
                index -= self.lowbit(index)
            return result
    
        # 单点修改
        def update(self, index: int, val: int) -> None:
            self.add(index + 1, val - self.nums[index])
            self.nums[index] = val
    
        # 获取范围和
        def sumRange(self, left: int, right: int) -> int:
            return self.preSum(right + 1) - self.preSum(left)
    
    
    上次更新: 2025/03/22, 03:52:10
    位存储

    位存储→

    Theme by Vdoing | Copyright © 2021-2025 Maktub_小明 | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式