JZ50 数组中重复的数字

本文最后更新于:2022年4月9日 中午

image-20211010151433845

Solution

  • 利用数组来保存出现次数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param numbers int整型vector
* @return int整型
*/
int duplicate(vector<int>& numbers) {
// write code here
int n = numbers.size();
if (n < 2) return -1;
vector<int> record(n, 0);
for (int num : numbers) {
record[num]++;
if (record[num] > 1) return num;
}
return -1;
}
};
  • 利用数字范围条件,空间复杂度O(1)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Solution {
public:
int duplicate(vector<int>& numbers) {
// write code here
if (numbers.size() < 2) return -1;
for (int i = 0; i < numbers.size(); ++i) {
while (i != numbers[i]) {
if (numbers[i] == numbers[numbers[i]])
return numbers[i];
// 每个数放到它的索引位置
swap(numbers[i], numbers[numbers[i]]);
}
}
return -1;
}
};

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!