Solve "Find the Duplicate Number" problem in an array of n+1 integers?
public int FindDuplicate(int[] nums) {
int slow = nums[0], fast = nums[0];
do {
slow = nums[slow];
fast = nums[nums[fast]];
} while (slow != fast);
fast = nums[0];
while (slow != fast) {
slow = nums[slow];
fast = nums[fast];
return slow;
Explanation:
Floyd’s Tortoise and Hare cycle detection, treating values as pointers.