图解算法通识讲义经典套路
双指针技巧与对撞收敛
核心心智模型:两端夹逼,化繁为简;利用单调性收敛搜索空间,将 O(N^2) 压制到 O(N)。
核心交互式算法图解演练沙盒
对撞双指针模型
相向双指针左右对撞收敛演练
步骤 1 / 4
目标和 (Target):26
当前求和 (Sum):2 + 23 = 25
和偏小 → left++
2idx: 0
7idx: 1
11idx: 2
15idx: 3
19idx: 4
23idx: 5
初始化:左指针 left=0 (数值 2),右指针 right=5 (数值 23)。当前求和 2 + 23 = 25 < target (26)。
关键操作与时空复杂度速查对照表
| 操作 / 算法阶段 | 平均时间 | 最坏时间 | 空间复杂度 | 核心底层机制 |
|---|---|---|---|---|
| 有序对撞扫描 | O(N) | O(N) | O(1) | 左右指针各遍历一次序列,常数空间原地比对。 |
| 快慢双指针判环 | O(N) | O(N) | O(1) | 快指针相对速度为 1,至多一圈内必在环中相遇。 |
template.java
int left = 0, right = nums.length - 1;
while (left < right) {
int sum = nums[left] + nums[right];
if (sum == target) {
return new int[]{left, right};
} else if (sum < target) {
left++;
} else {
right--;
}
}解题核心心法提炼
- 对撞指针前提常为「序列有序」,遇到无序数组可先执行 O(n log n) 排序。
- 三数之和去重是重中之重:在推进 left 与 right 时,必须跳过连续相同元素。
- 快慢指针相遇点与环起点的数学推导:相遇后慢指针回起点,快慢同走一步即可在入环点相聚。
常见踩坑警示与避坑指南
- 循环终止条件写错:left < right 还是 left <= right 混淆,导致死循环或漏判边界。
- 原地修改数组时慢指针递增时机错误,导致元素被过早覆盖。
对应 Hot 100 实战题目突围
原理已掌握!立即进入沉浸式工作台开始实战演练,强化代码肌肉记忆