算法套路 - 双指针
以前读过关于算法的10+种解题套路。如《【算法】一篇讲完12种方法》、《总结 2021 面试中的常见 14 种算法套路》等。小编非常同意这些总结,也推荐读者朋友们去一个一个方法突破。不过,小编今天想说的是,结合不同的数据结构来理解算法套路将会事关功倍(不绝对)。
双指针是各种算法套路总结中都会提到的一种。今天小编也来讲讲。
小编认为双指针其实是一种范围较大的方法,它其实还可以再细分:
- 快慢指针
- 左右指针,还可以再分(或说衍生)
- 滑动窗口
- 左右节点
快慢指针
快慢指针可解决链表、数组问题,如一次拿下链表环问题就用的是快慢指针,也可用于查找链表中间位置【leetcode】。

当然快慢指针还可以先行 n 步,然后再同速前进的形式(要说它是左右也可)。这种快慢指针可查找链表的倒数第 k 个元素【leetcode】,也可用于优化数组/链表去重【leetcode】。

左右指针
左右指针可解决链表、数组及树问题,最常见的当属二分查找了,当然左右指针也可用于字符串或数组的反转。而对于 leetcode 中的“两数和(有序)”和“三数和”也都可用左右指针来解决。


二叉树对称问题
同样,左右指针也因叉树本身就具有左右指针,所以判断二叉树对称问题【leetcode】也是用的相同思想。
滑动窗口
滑动窗口应该是双指针技巧的最高境界了,如果掌握了此算法,可以解决一大类子字符串匹配的问题,先留个思考题吧!
同样的,双指针在动态规划中也经常被用到。
《宁宁姐|动态规划》中有例子使用到。欢迎阅读!
算法套路 - 双指针
https://blog.isnap.cn/posts/13b90652/