返回全部文章

双指针:什么时候该想到“从两边逼近”

双指针看起来很常见,但很多人真正做题时并不会主动想到它。

双指针看起来很常见,但很多人真正做题时并不会主动想到它。

原因通常不是不会写,而是没有识别信号。

双指针到底在解决什么

它本质上是在利用一种关系:

  • 两个位置之间存在可移动的边界
  • 当前位置的选择会影响下一步搜索空间
  • 通过移动指针,可以避免重复枚举所有组合

也就是说,双指针的价值不在“两个指针”本身,而在于:

你能不能通过移动边界来减少无效搜索。

什么时候应该优先想到双指针

我通常会先看这几个信号:

  • 数据有序,或者排序后更容易处理
  • 问题和“两个位置”之间的关系有关
  • 暴力做法是两层枚举
  • 每次移动一边可以排除一整批不可能情况

这几个条件一旦出现,双指针就值得优先试。

常见场景

相向双指针

从两边往中间逼近,常见于:

  • 两数之和变体
  • 容器盛水
  • 回文判断

同向双指针

两个指针一起向前,常见于:

  • 去重
  • 原地删除
  • 合并有序结构

为什么双指针容易写错

常见错误通常不是思路错误,而是边界处理不清楚:

  • 指针什么时候移动
  • 相等时该怎么处理
  • 去重应该放在什么时候做

所以做完题后,最好复盘的不只是“这题用了双指针”,还要复盘:

  • 为什么移动左边
  • 为什么不是移动右边
  • 这种移动到底排除了哪些情况

结论

双指针不是模板题型,而是一种利用边界收缩搜索空间的思维方式。

真正重要的不是记住写法,而是养成判断:

我能不能通过移动一个边界,排除整批不必要的枚举。