问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

floyd判圈算法

发布网友 发布时间:2022-11-22 03:47

我来回答

1个回答

热心网友 时间:2024-12-04 21:59

问题:如何检测一个链表是否有环,如果有,那么如何确定环的起点.
要求 : 空间复杂度为O(1), 时间复杂度为O(n).

假设一个有环链表如下图: 利用floyd判圈算法可以做到下面的三件事:

使用两个指针slow和fast。两个指针都从链表的起始处S开始。slow每次向后移动一步,fast每次向后移动两步。若在fast到达链表尾部前slow与fast相遇了,就说明链表有环。
这里可以简单的证明一下:反证法,假如没有环,那么slow永远追不上fast,那么在fast到达链表尾部前slow不会fast相遇了。若相遇了,链表就有环。

当slow和fast相遇时,slow和fast必定在环上,所以只要让一者不动,另一者走一圈直到相遇,走过的节点数就是环的长度。

如图所示,设AB=n, SA=m。设环的长度为L。
假设slow走过的节点数为i,那么有:
i = m + n + aL a为slow绕过的环的圈数。
因为fast速度为slow的两倍,所以相同时间走过的节点数为slow的两倍,所以有:
2
i = m + n + bL b为fast绕过的环的圈数。
两者做差有 : i = (b-a)
L。
所以可知,fast和slow走过的距离是环的整数倍。
所以有m+n=L。
所以此时让slow回到起点S,,fast仍然在B。
让两个指针以每次一步的速度往前走。
当走了m步时,可发现slow和fast正好都在A处,即是环的起点。

floyd判圈算法是一个很有趣的算法,在某些题目上用处很大,比如下面这个。

给出一个数组 nums 包含 n + 1 个整数,每个整数是从 1 到 n (包括边界),保证至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。
注意事项

对于这个题目

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
宁波社保卡办理需要什么材料 宁波社保卡如何申领 有什么高性价比的隔离霜可以推荐? 防晒效果好的隔离霜有哪些值得入手? 下雨天经常爬在房子墙上的那种软体动物,不是蜗牛没壳的,可以在墙上把身... 原来是美男啊里面插曲、主题曲都有哪些? 请问下各位大虾,我在外地用外地农行卡网上转账到本地邮政卡星期六转账的... 为什么用支付宝买东西明明我余额足够,付款时却说我余额不足?2个... 萍乡烛式过滤器品牌 衡水烛式过滤器品牌推荐 Floyd算法与Dijkstra算法的区别 第三章 路径分析算法——基于Floyd算法的路径分析 自考本科推荐什么专业 QQ加好友时的问题怎么设 古风伤感句子91条 安装地板需留多宽缝 西安大学生就业补贴政策 神舟七号发射过程是什么样的? 三星智能穿戴app更新完无法启动 眼儿媚·迟迟春日弄轻柔的介绍 阿森纳球衣前的O2是什么意思? 请回答下列问题:2o2是什么意思? 双子座的人适合佩带什么水晶 王思聪年龄,身高 京城太子爷的老子是谁?? O2是什么意思啊?手机上有这个标志 汪雨是谁,谁是他老子? 生物学中o2和co 2的意思是什么? 美国各州大小,人口及资料(上) 美国佛蒙特州乱吗 姐姐过生日的祝福语短句 handon是什么意思 handon解释 iPhone 手机qq怎么发悄悄话 男人的10种风格,你属于哪一类? 广州会计从业资格考试——财经法规(无纸化)模拟(真题)试题及答案2010年... 求2010年广东省会计从业资格会计专业知识无纸化考试(试点)模拟版财经法 ... 请问谁有,广东省会计从业资格无纸化考试最后冲刺全真模拟精典试题:财经... 英语实词和虚词 雕刻机用中纤板18厘的,要用什么刀,转速多少,速度多少 请问多层实木和中纤板哪种甲醛高 香醋和陈醋的区别是什么 沈阳流浪狗救助站有几个 沈阳流浪狗收容所 沈阳有没有收养流浪猫流浪狗的地方?想捐助点东西但找不到 谁知道地址麻... 请问沈阳哪里有流浪狗救助站 沈阳或本溪哪里有流浪动物基地?具体位置在哪里!我想领养宠物! 沈阳有流浪狗救助站吗? 科龙空调制热时外机转,内机为什么不转 为什么冬天开空调机内机不转打制冷外机不转 跪求水浒传的情节概括和每一个情节概括的感悟