总纲
双指针指在遍历过程中使用两个指针进行扫描达到目的。大致分为快慢指针(相同方向)和左右指针(相向方向)。
值得一提的是,左右指针是很多算法的基础和搭配,如 归并排序、滑动窗口、字符匹配、单调栈
等。
快慢指针
快慢指针一般解决链表问题。
指针初始化指向 head,前进时 fast 在前,slow 在后,具体的步幅根据题目决定。
题目举例
题号 | 题目 | 难度 |
---|---|---|
141 | 环形链表 | 简单 |
142 | 环形链表II | 中等 |
剑指14 | 倒数第k个节点 | 简单 |
左右指针
左右指针主要解决数组/字符串问题。
两个索引值,一个指向开头 left = 0,一个指向末尾 right = nums.length - 1。
题目举例
题号 | 题目 | 难度 |
---|---|---|
704 | 二分查找 | 简单 |
167 | 两数之和II | 简单 |
633 | 平方数之和 | 简单 |
653 | 两数之和IV | 简单 |