美文网首页
快慢指针发散

快慢指针发散

作者: XJ2017 | 来源:发表于2019-12-15 10:40 被阅读0次

背景:昨晚跟前同事们宵夜被问道判断单向链表有无环的算法,第一次接触到快慢指针,觉得有意思!
旧思路:通过内存缓存路线,比对路线判断是否有环。

  • 优点(时间复杂度低):一遍算完
  • 缺点(空间复杂度高):内存占用与链表长度成正比

新思路:通过设定两个角色(快慢指针)分别以单节点与2倍(注意:任何大于或等于2倍数都行)单节点速度依次遍历,当出现两角色同时访问一个节点则表示存在环。

  • 优点1 (空间复杂度低):只占用两个角色的内存
  • 优点2(时间复杂度低):一遍算完

发散问题:怎么找到形成环的节点?

假设:第一个相遇步骤数N,第二次相遇步骤数M

  1. 计算环的大小
    M-N
  2. 计算指定范围查找形成环的节点
    从 N-(M-N)= 2N - M 开始查找
  3. 利用快慢指针查找环节点
    快慢指针都从 2N - M 开始,保持间距 M-N,按顺序遍历节点。当快慢节点第一次相同时则为形成换的节点

相关文章

  • 快慢指针发散

    背景:昨晚跟前同事们宵夜被问道判断单向链表有无环的算法,第一次接触到快慢指针,觉得有意思!旧思路:通过内存缓存路线...

  • 快慢指针的应用

    快慢指针 快慢指针中的快慢指的是移动的步长,快慢分别指的是快指针每次移动两步,满指针每次移动一步 快慢指针的应用 ...

  • 快慢指针总结

    快慢指针 所谓「快慢指针」是指设定两个指针,其中快的指针的移动速度是慢的指针的移动速度的两倍;“快慢指针”方法主要...

  • leetcode第142题:环形链表II [中等]

    题目描述 考点 链表 双指针(快慢指针) 解题思路 设置快慢指针slow, fast; 慢指针slow每次移动一个...

  • 快慢指针

    快慢指针即我们有两个及以上的指针,我们可以通过控制其步长去实现某种行为。 下图中自定义的名词解释如下: 目标节点:...

  • 快慢指针

    找出单向链表中倒数第 k 个节点。返回该节点的值普通解法时间复杂度2N 用快慢指针只用循环一遍N就行了

  • 快慢指针

  • 链表算法之-链表找环

    思想:快慢指针

  • [go语言算法] 输出链表的倒数第k个节点

    快慢指针法

  • 快慢指针的应用

    快慢指针的快慢主要是指在遍历链表过程中指针移动速度的快慢。比如遍历单链表,我们可以让指针每次移动一个节点,也可以让...

网友评论

      本文标题:快慢指针发散

      本文链接:https://www.haomeiwen.com/subject/xgkhnctx.html