第一阶段:找相遇
初始:slow = 0, fast = 0
走一步:slow = nums0 = 2, fast = numsnums\[0] = nums2 = 1
走两步:slow = nums2 = 1, fast = numsnums\[1] = nums3 = 4
走三步:slow = nums1 = 3, fast = numsnums\[4] = nums2 = 1
走四步:slow = nums3 = 4, fast = numsnums\[1] = nums3 = 4
停!slow == fast == 4,在数字 4 这里相遇了!
第二阶段:找入口
把 slow 扔回起点:slow = 0, fast 留在 4。
接下来两人都走一步:
slow = nums0 = 2
fast = nums4 = 2
一看,slow == fast == 2。两人在 2 相遇了!
return slow; 返回 2。
你回头看你的图,2 是不是正好就是你画的圈的入口? 是不是就是那个重复数?
完全对上了对不对!
现在,去把这段代码复制到你自己的编译器里,自己手敲一遍,你一定能彻底拿下这道题!
do {
slow = numsslow; // 慢指针走一步
fast = numsnums\[fast]; // 快指针走两步
} while (slow != fast);