So impressive solution. Share my explanation as below

`k`

is the length before entering circle,

`c`

is the length of circle

`A`

is the point to enter circle

When fast and slow meets, let the distance moved by slow be `X`

Then `X = 2X-X = n*c`

where `n`

is an integer and `n*c>=k`

So the meeting point of fast and slow has a offset `(n*c-k)%c`

to point A

To let slow reach point A we need slow to go another `k`

points, so that `(n*c-k+k)%c=0`

When finder goes from start point to A, the distance is `k`

, slow goes the same distance, and we get the entrance of the circle.

The entrance of circle has more than one in-pointers, this means at least two numbers at different indices in the array have same value, the index of slow and finder is the duplicate number.