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

双指针技巧与对撞收敛

核心心智模型:两端夹逼,化繁为简;利用单调性收敛搜索空间,将 O(N^2) 压制到 O(N)。

核心交互式算法图解演练沙盒
对撞双指针模型

相向双指针左右对撞收敛演练

步骤 1 / 4
目标和 (Target):26
当前求和 (Sum):2 + 23 = 25
和偏小 → left++
L [0]
2idx: 0
7idx: 1
11idx: 2
15idx: 3
19idx: 4
R [5]
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 实战题目突围

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

查看全部题目