双指针算法题型总结

双指针算法题型总结

两端收缩

  • [1-167 两数之和 II](LeetCode 167 两数之和 II.md)
  • [2-15 三数之和](LeetCode 15 三数之和.md)
  • [3-11 盛水最多的容器](LeetCode 11 盛水最多的容器.md)

隐形挡板

  • [4-42 接雨水](LeetCode 42 接雨水 - 双指针解法.md)
  • [8-31 下一个排列](LeetCode 31 下一个排列.md)

思路

双指针题常见的关键是:先定义“当前状态”,再决定“下一步向哪边移动”。 动态规划通常是“由前推后”,双指针更多是“由当前状态剪枝后继续前进”。

以 [3-11 盛水最多的容器](LeetCode 11 盛水最多的容器.md) 为例:每次都在相邻状态里选择更有机会变优的方向,这就是双指针能降复杂度的核心。