双指针
双指针一般用于遍历数组,两个指针指向数组的不同元素,两个指针相互协助解决问题。当然,双指针问题可以延伸到多指针问题,用多个指针协助解决问题。
双指针技巧分类
- 快慢指针
慢指针每次移动1步,快指针每次移动2步 - 对撞指针
一个指针从同一数组头向数组尾移动,另一个指针从数组尾向数组头移动,可以用来进行搜索,待搜索的数组往往是排好序的 - 滑动窗口
两个指针在同一数组中移动,遍历方向相同且不会相交,两个指针包围的区域即为当前的窗口,寻找解决问题的区间,常用于区间搜索
解题提示
- 当题目说到数组是有序数组时,就该想到用对撞指针
- 当题目需要移动数组里元素时,尝试使用用快慢指针
双指针算法相关例题(点击题目跳转至相应题解)
快慢指针
对撞指针
LeetCode 167.两数之和II-输入有序数组(简单)
LeetCode 680.验证回文字符串Ⅱ(简单)
滑动窗口
普通双指针
LeetCode 88.合并两个有序数组(简单)
LeetCode 633.平方数之和(中等)
LeetCode 524.通过删除字母匹配到字典里最长单词(中等)