算法套路 - 双指针

以前读过关于算法的10+种解题套路。如《【算法】一篇讲完12种方法》、《总结 2021 面试中的常见 14 种算法套路》等。小编非常同意这些总结,也推荐读者朋友们去一个一个方法突破。不过,小编今天想说的是,结合不同的数据结构来理解算法套路将会事关功倍(不绝对)。

双指针是各种算法套路总结中都会提到的一种。今天小编也来讲讲。

小编认为双指针其实是一种范围较大的方法,它其实还可以再细分:

  • 快慢指针
  • 左右指针,还可以再分(或说衍生)
    • 滑动窗口
    • 左右节点

快慢指针

快慢指针可解决链表、数组问题,如一次拿下链表环问题就用的是快慢指针,也可用于查找链表中间位置【leetcode】。

2-pointer-mid

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

2-pointer-trim

左右指针

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

image-20220720144716528
2-pointer-3sum

二叉树对称问题

同样,左右指针也因叉树本身就具有左右指针,所以判断二叉树对称问题【leetcode】也是用的相同思想。

滑动窗口

滑动窗口应该是双指针技巧的最高境界了,如果掌握了此算法,可以解决一大类子字符串匹配的问题,先留个思考题吧!

同样的,双指针在动态规划中也经常被用到。

宁宁姐|动态规划》中有例子使用到。欢迎阅读!


算法套路 - 双指针
https://blog.isnap.cn/posts/13b90652/
作者
三岁于辛
发布于
2023年2月26日
许可协议