图解算法通识讲义经典套路

前缀和与差分数组空间换时间

核心心智模型:前人栽树,后人乘凉;预处理累加前缀,任意连续区间的和与积瞬间 O(1) 产出。

核心交互式算法图解演练沙盒
前缀和模型

前缀和数组与 O(1) 区间求和演算

步骤 1 / 3
当前查询区间:[1, 3]
sumRange(1, 3) = P[4] - P[1] = 17 - 1 = 16
单次查询: O(1) 常数时间
原数组 nums (长度 N):
1
nums[0]
7
nums[1]
3
nums[2]
6
nums[3]
5
nums[4]
6
nums[5]
前缀和数组 prefix (长度 N+1):
0
P[0]
1
P[1] (减数)
8
P[2]
11
P[3]
17
P[4] (被减数)
22
P[5]
28
P[6]

区间 [1...3] 求和:检索 7 + 3 + 6。直接通过前缀和做差 P[4] - P[1] 瞬间算出 16,耗时 O(1)。

关键操作与时空复杂度速查对照表
操作 / 算法阶段平均时间最坏时间空间复杂度核心底层机制
前缀和预处理O(N)O(N)O(N)单次线性扫描累加构建。
区间子数组和查询O(1)O(1)O(1)两次读取前缀数组做差。
template.java
int[] prefix = new int[nums.length + 1];
for (int i = 0; i < nums.length; i++) {
    prefix[i + 1] = prefix[i] + nums[i];
}
int rangeSum = prefix[r + 1] - prefix[l];
解题核心心法提炼
  • 前缀和数组长度通常设置为 n + 1,并将 prefix[0] 设为 0,防止处理左边界 0 时出现负下标。
  • 除自身以外数组的乘积是前缀积与后缀积的经典结合。
  • 差分数组是前缀和的逆运算,用于在 O(1) 时间内完成对区间所有元素的频繁增减操作。
常见踩坑警示与避坑指南
  • 下标偏移对应关系混乱:忘记 prefix[i] 对应的是原始数组的前 i 个元素(0 到 i-1)。

对应 Hot 100 实战题目突围

原理已掌握!立即进入沉浸式工作台开始实战演练,强化代码肌肉记忆

查看全部题目