Find the Duplicate Number
ID: 633; medium; 寻找重复的数
Solution 1 (Java)
public class Solution {
/**
* @param nums: an array containing n + 1 integers which is between 1 and n
* @return: the duplicate one
*/
public int findDuplicate(int[] nums) {
int left = 1, right = nums.length;
while (left + 1 < right) {
int mid = left + (right - left) / 2;
if (countSmallerNums(mid, nums) <= mid) {
left = mid;
} else {
right = mid;
}
}
if (countSmallerNums(left, nums) <= left)
return right;
return left;
}
private int countSmallerNums(int num, int[] nums) {
int count = 0;
for (int n : nums) {
if (n <= num) count++;
}
return count;
}
}Notes
Solution 2 (Java)
Notes (Sort)
Solution 3 (Java)
Notes (Set)
Solution 4 (Java)
Notes (Array as HashMap)
Solution 5 (Java)
Notes (Floyd's Algorithm)
Last updated