数组双指针分为三类:
【对撞指针】两个指针分别从序列两端向中间移动,常用于查找有序数组中满足特定条件的元素对、字符串反转等场景。
【快慢指针】两个指针从同一端出发,步长不同,常用于数组元素的移动、删除,或链表中的环检测、长度统计等问题。
【分离指针】两个指针分别遍历不同的数组或链表,适合处理有序数组的合并、交集、并集等问题。
对撞指针题目:
| 标题 | 题解 | 标签 | 难度 |
|---|---|---|---|
| 0167. 两数之和 II - 输入有序数组 | 数组、双指针、二分查找 | 中等 | |
| 0344. 反转字符串 | 双指针、字符串 | 简单 | |
| 0345. 反转字符串中的元音字母 | 双指针、字符串 | 简单 | |
| 0125. 验证回文串 | 双指针、字符串 | 简单 | |
| 0011. 盛最多水的容器 | 贪心、数组、双指针 | 中等 | |
| 0611. 有效三角形的个数 | 贪心、数组、双指针、二分查找、排序 | 中等 | |
| 0015. 三数之和 | 数组、双指针、排序 | 中等 | |
| 0016. 最接近的三数之和 | 数组、双指针、排序 | 中等 | |
| 0018. 四数之和 | 数组、双指针、排序 | 中等 | |
| 0259. 较小的三数之和 | 数组、双指针、二分查找、排序 | 中等 | |
| 0658. 找到 K 个最接近的元素 | 数组、双指针、二分查找、排序、滑动窗口、堆(优先队列) | 中等 | |
| 1099. 小于 K 的两数之和 | 数组、双指针、二分查找、排序 | 简单 | |
| 0075. 颜色分类 | 数组、双指针、排序 | 中等 | |
| 0360. 有序转化数组 | 数组、数学、双指针、排序 | 中等 | |
| 0977. 有序数组的平方 | 数组、双指针、排序 | 简单 | |
| 0881. 救生艇 | 贪心、数组、双指针、排序 | 中等 | |
| 0042. 接雨水 | 栈、数组、双指针、动态规划、单调栈 | 困难 | |
| 0443. 压缩字符串 | 双指针、字符串 | 中等 |
快慢指针练习题目:
| 标题 | 题解 | 标签 | 难度 |
|---|---|---|---|
| 0026. 删除有序数组中的重复项 | 数组、双指针 | 简单 | |
| 0080. 删除有序数组中的重复项 II | 数组、双指针 | 中等 | |
| 0027. 移除元素 | 数组、双指针 | 简单 | |
| 0283. 移动零 | 数组、双指针 | 简单 | |
| 0845. 数组中的最长山脉 | 数组、双指针、动态规划、枚举 | 中等 | |
| 0088. 合并两个有序数组 | 数组、双指针、排序 | 简单 | |
| 0719. 找出第 K 小的数对距离 | 数组、双指针、二分查找、排序 | 困难 | |
| 0334. 递增的三元子序列 | 贪心、数组 | 中等 | |
| 0978. 最长湍流子数组 | 数组、动态规划、滑动窗口 | 中等 | |
| LCR 139. 训练计划 I | 数组、双指针、排序 | 简单 |
分离指针练习题目:
| 标题 | 题解 | 标签 | 难度 |
|---|---|---|---|
| 0350. 两个数组的交集 II | 数组、哈希表、双指针、二分查找、排序 | 简单 | |
| 0925. 长按键入 | 双指针、字符串 | 简单 | |
| 0844. 比较含退格的字符串 | 栈、双指针、字符串、模拟 | 简单 | |
| 1229. 安排会议日程 | 数组、双指针、排序 | 中等 | |
| 0415. 字符串相加 | 数学、字符串、模拟 | 简单 | |
| 0392. 判断子序列 | 双指针、字符串、动态规划 | 简单 |