前缀和知识点
目录
前缀和 (Prefix Sum)
1 核心思想
前缀和是一种预处理技术,通过预先计算数组的前缀和,将区间求和查询从 $O(n)$ 优化到 $O(1)$。
定义: prefix[i] 表示数组前 i 个元素的和(从下标 1 开始)。
$$ \text{prefix}[i] = \sum_{k=0}^{i-1} \text{nums}[k] $$
区间和公式: $\text{sum}(l, r) = \text{prefix}[r+1] - \text{prefix}[l]$
2 一维前缀和模板
| |
3 二维前缀和模板
| |
4 常见变形
4.1 1. 前缀和 + 哈希表(求子数组和为 k 的个数)
| |
4.2 2. 前缀和求最长/最短子数组
- 求 和为 k 的最长子数组长度 → 哈希表存前缀和首次出现的下标
- 求 和 ≥ k 的最短子数组 → 单调队列 + 前缀和
4.3 3. 差分数组(前缀和的逆运算)
| |
4.4 4. 前缀异或 / 前缀积
- 前缀异或:
preXor[i+1] = preXor[i] ^ nums[i] - 区间异或和:
preXor[r+1] ^ preXor[l]
5 经典题目
| 题目 | 关键点 | 笔记 |
|---|---|---|
| 560. 和为 K 的子数组 | 前缀和 + 哈希表计数 | 题解 |
| 304. 二维区域和检索 | 二维前缀和模板 | — |
| 525. 连续数组 | 0 变 -1,前缀和 + 哈希表 | 题解 |
| 974. 和可被 K 整除的子数组 | 同余定理:(pre % k + k) % k | — |
| 238. 除自身以外数组的乘积 | 前缀积 + 后缀积 | — |
| 437. 路径总和 III | 树上前缀和 + 回溯 | — |
| 862. 和至少为 K 的最短子数组 | 前缀和 + 单调队列 | — |
| 1124. 表现良好的最长时间段 | 前缀和 + 贪心 | — |
| 1314. 矩阵区域和 | 二维前缀和模板 | — |
6 注意事项
- 前缀和数组长度通常是
n+1,prefix[0] = 0,方便处理从头开始的区间 - 哈希表初始化
cnt[0] = 1(或pos[0] = -1),表示空前缀 - 元素可能为负数时,前缀和不单调,不能用滑动窗口,要用哈希表
- 取模问题注意负数处理:
(x % k + k) % k - 二维前缀和注意容斥原理:加两次左上角
