Note:
- You must not modify the array (assume the array is read only).
- You must use only constant, O(1) extra space.
- Your runtime complexity should be less than
O(n2)
. - There is only one duplicate number in the array, but it could be repeated more than once.
Credits:
Special thanks to @jianchao.li.fighter for adding this problem and creating all test cases.
public class Solution {
public int findDuplicate(int[] nums) {
int n = nums.length;
int slow = n;
int fast = n;
while (true) {
slow = nums[slow - 1];
fast = nums[nums[fast - 1] - 1];
if (slow == fast) {
break;
}
}
slow = n;
while (slow != fast) {
slow = nums[slow - 1];
fast = nums[fast - 1];
}
return slow;
}
}
没有评论:
发表评论