题解 | #数组中重复的数字#
数组中重复的数字
https://www.nowcoder.com/practice/6fe361ede7e54db1b84adc81d09d8524
class Solution {
public:
int duplicate(vector<int>& numbers) {
// 类似原地哈希的思想
// 所有数字都在0到n-1的范围内,这就是可以采用下标来做哈希表的暗示
int i = 0;
int n = numbers.size();
while (i < n) {
if (numbers[i] < 0 || numbers[i] > n) break;
if (numbers[i] == i) {
i++;
continue;
} else {
// 如果 numbers[i] != i,那么numbers[i]理应出现在下标 i = numbers[i]处
if (numbers[i] == numbers[numbers[i]]) {
return numbers[i];
} else {
swap(numbers[i], numbers[numbers[i]]);
}
}
}
return -1;
}
};
