287. Find the Duplicate Number
Problem
Approach
We can solve this problem with Floyd's Tortoise and Hare
. If we interpret nums
such that for each pair of index i
and value nums[i]
, the next value nums[j]
is at index nums[i]
, we can reduce this problem to cycle detection.
Code
class Solution {
public int findDuplicate(int[] nums) {
int fast = nums[0];
int slow = nums[0];
while(true){
fast = nums[nums[fast]];
slow = nums[slow];
if(fast == slow){
break;
}
}
int head = nums[0];
int q = fast;
while(head != q){
q = nums[q];
head = nums[head];
}
return q;
}
}