解題思路:
快慢指針
-
第一步,慢指針每次移動一步,快指針每次移動兩步,直到它們相遇。這一步保證了它們在環中相遇。
-
接下來,將其中一個指針(快指針或慢指針)重置到起點(即數組的第一個位置),然后兩個指針都每次只移動一步。它們再次相遇的位置就是環的起始節點,也就是數組中重復的元素。
class Solution {public int findDuplicate(int[] nums) {int slow = 0, fast = 0;do {slow = nums[slow];fast = nums[nums[fast]];} while (slow != fast);slow = 0;while (slow != fast) {slow = nums[slow];fast = nums[fast];}return slow;}
}