双指针
双指针
快慢指针
快慢指针是一种在线性数据结构上使用两个不同速度指针的技术。
特点
- 时间复杂度:
- 空间复杂度:
- 适用于环形检测、中点查找等场景
分类
| 环形检测 | 检测链表是否有环 | 快指针每次移动2步 |
| 中点查找 | 查找链表中点 | 快指针每次移动2步 |
| 倒数第k个 | 查找倒数第k个节点 | 快指针先走k步 |
| 链表相交 | 判断两个链表是否相交 | 对齐后同速前进 |
对撞指针
对撞指针是一种在有序数组中使用两个相向移动的指针的技术。
特点
- 时间复杂度:
- 空间复杂度:
- 适用于查找、排序等场景
分类
| 二分查找 | 有序数组中查找元素 | 相向移动 |
| 两数之和 | 查找和为目标值的两个数 | 相向移动 |
| 三数之和 | 查找和为目标值的三个数 | 固定一个数 |
| 滑动窗口 | 维护满足条件的区间 | 同向移动 |
滑动窗口
滑动窗口是一种使用两个指针维护一个区间的技术。
特点
- 时间复杂度:
- 空间复杂度:与具体问题相关
- 适用于子串、子数组问题
分类
| 定长窗口 | 固定长度的区间统计 | 数组/队列 |
| 不定长窗口 | 满足条件的最长/最短区间 | 哈希表/集合 |
| 多指针窗口 | 多个条件的区间维护 | 复合数据结构 |
应用场景对比
快慢指针适合:
- 链表环形检测
- 链表中点查找
- 链表倒数第k个
- 链表相交判断
对撞指针适合:
- 有序数组查找
- 数组元素对撞
- 区间和问题
- 回文串判断
滑动窗口适合:
- 子串问题
- 子数组问题
- 区间统计
- 连续序列维护
选择建议
- 链表问题优先考虑快慢指针
- 有序数组优先考虑对撞指针
- 子串/子数组优先考虑滑动窗口
- 需要常数空间时考虑双指针
- 需要线性时间时考虑双指针
牛客代码笔记-牛栋 文章被收录于专栏
汗牛充栋,学海无涯。<br/> 内含算法知识点讲解,以及牛客题库精选例题。<br/> 学习算法,从牛栋开始。

巨人网络公司福利 91人发布
查看29道真题和解析