双指针算法专栏导览:从核心模型到 LeetCode 面试通关

专栏定位

本专栏面向有一定编程基础、正在备战技术面试的工程师。讨论范围严格限定于双指针算法(包含对撞指针、快慢指针、滑动窗口三大变体)及其在数组、链表场景下的应用,不涉及树/图的遍历、动态规划等其他领域。

目标:帮助读者真正理解双指针的核心直觉,而非死记硬背套路。每道题的讲解遵循”是什么 → 为什么出现 → 不这样会怎样 → 如何落地 → 边界与反例”的推导链,力求通俗易懂而不失深度。


专栏目录

序号文章标题核心话题覆盖 LeetCode 题目
01双指针算法全景:核心直觉、三大模型与面试考频分析双指针的本质(压缩搜索空间)、三大分支、适用场景判断、复杂度证明概念篇,无具体题目
02对撞指针入门:有序数组中的两数之和对撞指针的搜索空间消除原理、有序性前提的作用、返回下标的两种变体Two Sum II、Valid Palindrome、Reverse String
03三数之和与 N 数之和:排序+对撞指针的组合拳多重对撞的”降维”思路、去重逻辑的本质、回溯框架与双指针的对比3Sum、3Sum Closest、4Sum
04对撞指针进阶:盛水容器与接雨水的几何直觉Container With Most Water 的贪心论证、接雨水的左右边界预处理与双指针等价性Container With Most Water、Trapping Rain Water
05快慢指针精讲:链表成环检测与 Floyd 判圈算法快慢指针的数学原理、Floyd 算法的三段证明、环长与环起点的精确计算Linked List Cycle、Linked List Cycle II、Happy Number
06链表双指针实战:倒数第 N 个节点与相交链表链表”提前出发”技巧、哑节点的工程价值、相交链表的等长对齐思路Remove Nth Node From End of List、Intersection of Two Linked Lists、Palindrome Linked List
07滑动窗口基础:定长窗口与可变窗口的统一框架滑动窗口为何比暴力快、定长窗口的”加一减一”维护、可变窗口的”扩张-收缩”状态机Maximum Average Subarray I、Minimum Size Subarray Sum、Longest Subarray of 1’s After Deleting One Element
08滑动窗口进阶:无重复字符与字符频次匹配哈希表在窗口中的维护技巧、“至多 K 个不同字符”的抽象框架Longest Substring Without Repeating Characters、Permutation in String、Longest Substring with At Most Two Distinct Characters
09最小覆盖子串:滑动窗口的最难挑战多字符频次的”满足条件”判断、formed 计数器的工程设计、收缩条件的精确建模Minimum Window Substring、Find All Anagrams in a String、Substring with Concatenation of All Words
10双指针综合通关:模式识别、算法选型与面试高频模式总结三大模型的判断决策树、常见陷阱盘点、复杂度速查、面试现场心理模型综合复习篇

专栏阅读建议

  1. 第 01 篇必读:理解双指针的本质(压缩搜索空间),后续所有题目的解法才有理论支撑,而不是”感觉像双指针就用双指针”
  2. 对撞指针篇(02-04):重点理解”有序性”是前提,不是所有两指针都叫对撞指针
  3. 快慢指针篇(05-06):快慢指针的核心是节奏差,建议在纸上画链表逐步模拟,体会数学推导的过程
  4. 滑动窗口篇(07-09):滑动窗口是可变对撞指针的特化,理解”窗口扩张条件”和”窗口收缩条件”是关键,建议用状态机思维理解
  5. 本专栏不覆盖:树的两指针遍历(BST 中序双指针)、图中的双向 BFS(虽然形式类似,但属于图算法范畴)

双指针适用场景速查表

场景特征推荐模型典型例题
数组/字符串,有序,找两数之和/差对撞指针Two Sum II
数组/字符串,求满足条件的连续子数组滑动窗口Minimum Size Subarray Sum
链表,检测环快慢指针Linked List Cycle
链表,找中点快慢指针Middle of the Linked List
链表,找倒数第 K 个距离双指针Remove Nth Node From End
数组,原地去重/移动零同向双指针Remove Duplicates from Sorted Array
字符串,回文判断对撞指针Valid Palindrome

时间复杂度收益速查表

暴力做法双指针优化后优化原理
(两重循环枚举两端点)利用有序性,每次移动一端,永久消除一列搜索空间
(枚举所有子数组起终点)单调性保证右端点不需要回退,窗口总移动次数为
(两次遍历找链表长度再对齐)(一次)快慢指针/距离指针利用节奏差,一次遍历完成