Floyd判圈算法/龟兔赛跑算法,图解演示理解及证明。快慢双指针,前后双指针...

Floyd判圈算法(Floyd Cycle Detection Algorithm),又称龟兔赛跑算法(Tortoise and Hare Algorithm),是一个可以在有限状态机、迭代函数或者链表上判断是否存在环,以及判断环的起点与长度的算法。

其算法的思想如下:

如果有环=》

  1. 有限时间内快慢指针必然相遇且相遇点在环上
  2. 相遇点和起点的等速指针将在环的入口处相遇

其算法的用处如下:

  1. 判断是否有环
  2. 找到环的起点
  3. 计算环的长度

1,判断是否有环=》

这个非常简单。设计一个快指针,一个慢指针,同时从起点出发,有限时间后 快慢指针能相遇即代表有环,永远不相遇代表没环。道理很简单,好比龟兔在操场上的环形跑道上赛跑,同时从起点出发,兔子比乌龟速度快,两者匀速,那么有限的时间后兔子一定能追上跑得慢的乌龟,再次相遇时,且兔子领先乌龟刚好一圈。但如果是在线性路上赛跑,兔子将持续领先,中途永远也不会相遇,直到兔子到达终点停下来。
如下图,用快慢指针简单模拟一下龟兔赛跑。从起点出发,兔子一次跑两步,乌龟一次跑一步。
快慢双指针

2,找到环的起点=》

我们发现,龟兔确实

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值