双指针

双指针

快慢指针

快慢指针是一种在线性数据结构上使用两个不同速度指针的技术。

特点

  1. 时间复杂度:
  2. 空间复杂度:
  3. 适用于环形检测、中点查找等场景

分类

算法 问题描述 特点
环形检测 检测链表是否有环 快指针每次移动2步
中点查找 查找链表中点 快指针每次移动2步
倒数第k个 查找倒数第k个节点 快指针先走k步
链表相交 判断两个链表是否相交 对齐后同速前进

对撞指针

对撞指针是一种在有序数组中使用两个相向移动的指针的技术。

特点

  1. 时间复杂度:
  2. 空间复杂度:
  3. 适用于查找、排序等场景

分类

算法 问题描述 特点
二分查找 有序数组中查找元素 相向移动
两数之和 查找和为目标值的两个数 相向移动
三数之和 查找和为目标值的三个数 固定一个数
滑动窗口 维护满足条件的区间 同向移动

滑动窗口

滑动窗口是一种使用两个指针维护一个区间的技术。

特点

  1. 时间复杂度:
  2. 空间复杂度:与具体问题相关
  3. 适用于子串、子数组问题

分类

算法 问题描述 数据结构
定长窗口 固定长度的区间统计 数组/队列
不定长窗口 满足条件的最长/最短区间 哈希表/集合
多指针窗口 多个条件的区间维护 复合数据结构

应用场景对比

快慢指针适合:

  1. 链表环形检测
  2. 链表中点查找
  3. 链表倒数第k个
  4. 链表相交判断

对撞指针适合:

  1. 有序数组查找
  2. 数组元素对撞
  3. 区间和问题
  4. 回文串判断

滑动窗口适合:

  1. 子串问题
  2. 子数组问题
  3. 区间统计
  4. 连续序列维护

选择建议

  1. 链表问题优先考虑快慢指针
  2. 有序数组优先考虑对撞指针
  3. 子串/子数组优先考虑滑动窗口
  4. 需要常数空间时考虑双指针
  5. 需要线性时间时考虑双指针
牛客代码笔记-牛栋 文章被收录于专栏

汗牛充栋,学海无涯。<br/> 内含算法知识点讲解,以及牛客题库精选例题。<br/> 学习算法,从牛栋开始。

全部评论

相关推荐

酷酷的喜马拉雅山:感觉这比一直在初筛不动的好多了
点赞 评论 收藏
分享
牛客吹哨人:哨哥晚点统一更新到黑名单:能救一个是一个!26届毁意向毁约裁员黑名单https://www.nowcoder.com/discuss/1525833
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务