a f
b e
c d
假设在圆圈中,有两个点slow、fast,每次slow走一步,每次fast走两步。则在一圈的步数之内,fast一定能和slow重合,因为他们的距离小于一圈的步数,每次fast追上一步。
a f
b e
dummy x y c d
假设slow和fast从dummy开始走,直到重合。slow走了x步,fast走了2x步。直线距离设为a,slow在圆上走了b,走一周圆的距离为c。则a+b=x, a+b+c=2x。得知走一周圆的距离为x。
此时令slow从dummy出发走x步。再令cur为dummy,slow和cur此后每走一步,重合的地方即为进入圆的起始点。
代码如下:
1 | /** |
运行结果:9ms,超过61.2%