三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

LeetCode 树状数组应用题解

LeetCode 树状数组应用题解

LeetCode 树状数组应用题解

题目描述

总结树状数组的各种应用场景。

树状数组的应用场景

1. 动态数组前缀和

  • 快速计算数组的前缀和。
  • 快速更新数组中某个位置的值。

2. 逆序数统计

  • 统计数组中的逆序对数量。
  • 利用树状数组存储已经遍历过的元素。

3. 区间和查询

  • 快速计算数组某个区间的元素和。
  • 支持区间更新。

4. 离散化

  • 将大范围数据映射到小范围索引。
  • 配合树状数组处理。

5. 动态排名

  • 动态维护元素的排名。
  • 快速查询第 k 小的元素。

代码实现

class FenwickTree: def __init__(self, n): self.n = n self.tree = [0] * (n + 1) def update(self, i, delta): while i <= self.n: self.tree[i] += delta i += i & (-i) def query(self, i): result = 0 while i > 0: result += self.tree[i] i -= i & (-i) return result # 测试 def test_fenwick_tree(): ft = FenwickTree(5) ft.update(1, 1) ft.update(2, 2) print(ft.query(3)) # 输出:3 if __name__ == "__main__": test_fenwick_tree()

总结

树状数组是一种高效的数据结构,可以应用于多种场景,包括前缀和查询、逆序数统计、区间和查询等。

← 返回列表