
方法一:HashMap,TC : O(N), SC: O(N)
class Solution {
public int findRepeatNumber(int[] nums) {
Set<Integer> set = new HashSet<>();
int result = 0;
for (int x : nums) {
if (!set.contains(x)) {
set.add(x);
} else {
result = x;
break;
}
}
return result;
}
}
方法二:原地哈希,TC : O(N), SC: O(1)
- 充分利用idx和item的范围关系,【0,n】和【0,n-1】
- 把item归位,如果归位的过程中遇到重复了,直接返回那个重复值。

class Solution {
public int findRepeatNumber(int[] nums) {
for (int i = 0; i < nums.length; i++) {
while (nums[i] != i) {
if (nums[nums[i]] == nums[i]) {
return nums[i];
}
int tmp = nums[nums[i]];
nums[nums[i]] = nums[i];
nums[i] = tmp;
}
}
return 0;
}
}
