本文已参与「新人创作礼」活动,一起开启掘金创作之路。
快慢指针
和大家分享一道比较有趣的算法题:leetcode-cn.com/leetbook/re…
先给大家讲一个故事,在我高中还在体考队里的时候,不管风吹雨打每天都要训练,那么训练之前肯定是要热身的吧,最基本的激活身体的方式不就是慢跑吗,而我们跑步热身的时间也是有严格要求的,教练每次都会拿着挂在脖子上的秒表。
教练:1200米热身不想跑那就跑少点,来两趟400
我们:。。。
由于我们队里每个人的水平都不太一样,而且总有那么一两个油条想偷懒,因此就出现了这种情况:
小张:老王,我们跑慢点,后面的小李马上就要套圈啦
老王:嗷嗷,等下我们再跟在小李后面,最后冲一下跑5圈就行了,那么多人教练也看不过来哈
在日常训练中经常容易出现有些人 “被套圈” 的摸鱼现象,先撇开教练有没有发现的问题,那么我们从算法的角度来分析一下这个套圈是怎么一回事儿
其实原因很简单,就是小李的跑步速度比老王和小张快(我们假设跑步的时候都是匀速的),然后他们都在一个闭合环状回路上重复,因此只要保持有差速,并且一直在回路上,那么必然会被套圈。
因此我们总结总结一下:
要被套圈,两个人就必然有差速并且在同一个回路上跑,反之,两个人跑步有差速并且在同一个回路上跑,那么跑得慢的必然被套圈
因此: 被套圈是两个人在回路上跑步有差速的充要条件
所以回到最开始那一道算法题,题目是为了是否检测回环,那么根据上面的结论,不就是看一下有没有被套圈不就OK了嘛,那么套圈不就是提供差速来判断的嘛,因此只要你会链表的操作,并且控制他们的差速,然后每次前进的时候都判断有没有被套圈就OK了
最后希望我得分享,大家能够有所收获,故事听听就罢哈哈