Change Original Array
Sort and compare neighbor
Change Original Array
Swap elements to the “sorted” position, if the “sorted” position is already has the element, it’s a duplicate number
class Solution {
public int findRepeatNumber(int[] nums) {
for (int i = 0; i < nums.length; i++) {
while (i != nums[i]) {
int correctIndex = nums[i];
if (nums[correctIndex] == nums[i]) {
// already has one correct number
return nums[i];
}
int tmp = nums[correctIndex];
nums[correctIndex] = nums[i];
nums[i] = tmp;
}
}
return -1;
}
}
Not Change Original Array
HashSet
Not Change Original Array
Additional array, put elements into new array
NOTE
Not Change Original Array
Binary Search
class Solution {
public int findRepeatNumber(int[] nums) {
int left = 0, right = nums.length - 1;
while (left < right) {
int mid = (left + right) / 2;
if (count(nums, left, mid) > (mid - left + 1)) {
right = mid;
} else if (count(nums, mid + 1, right) > (right - mid)) {
left = mid + 1;
}
}
return left;
}
private int count(int[] nums, int min, int max) {
int count = 0;
for (int i = 0; i <= nums.length - 1; i++) {
if (nums[i] >= min && nums[i] <= max) count++;
}
return count;
}
}