「兔了个兔」龟兔赛跑——乌龟和兔子能否相遇?

前言

森林里一年一度的赛跑大赛又开始了,乌龟和兔子又被分到了一组,这次乌龟还能跑过兔子吗?

比赛规则:

  1. 乌龟每次移动1个单元格,兔子每次移动2个单元格。
  2. 随机出现一条赛道,赛道可能为直线,也可能为含有环线。
  3. 如果乌龟和兔子跑进环形区域,则一直在环形区域内前进,直到相遇。
  4. 乌龟和兔子都很正经,只往前走,不会后退,也不会相互放水。

根据以上规则,写出程序,判断乌龟是否可以追上兔子(能否相遇)。

思路解析

从比赛规则中可以看出,如果赛道是直线的话,乌龟和兔子是不能相遇的(起点除外)。

所以,乌龟和兔子能否和兔子相遇的关键点在于赛道是否含有环状区域。

这里我们用到“快慢指针”的概念。

快慢指针

快慢指针中的快慢指的是移动的步长,即每次向前移动速度的快慢。例如可以让快指针每次沿链表向前移动2,慢指针每次向前移动1次。

直线赛道

如果是直线赛道,因为兔子比乌龟走的快,只需要判断兔子是否能跑完整个赛道就可以了。

例如,直线赛道由以下节点组成,定义两个指针,兔子为快指针,乌龟为慢指针,如果快指针的下一个节点为Null,说明是直线型赛道,这种情况乌龟是追不上兔子的。

环形赛道

如果是环形赛道,例如下图,其中10的下一个节点为5,在这里形成了一个环,一旦进入这个环中是没办法出去的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值