classSolution{publicintfindDuplicate(int[] nums){int slow =0;int fast =0;while(true){
slow = nums[slow];
fast = nums[nums[fast]];if(slow == fast)break;}int a =0;int b = slow;while( a != b){
a = nums[a];
b = nums[b];}return a;}}
解法2 - 二分查找
classSolution{publicintfindDuplicate(int[] nums){int len = nums.length;int left =1;int right = len -1;while(left < right){int mid =(left + right)>>1;int cnt =0;for(int num : nums){if(num <= mid){
cnt +=1;}}if(cnt > mid){// 重复元素位于区间 [left, mid]
right = mid;}else{// [mid + 1, right]
left = mid +1;}}return left;}}