题解 | #数组中重复的数字#
数组中重复的数字
https://www.nowcoder.com/practice/6fe361ede7e54db1b84adc81d09d8524
方法一:借助辅助数组
基本思路
创建一个记录数字已出现次数的数组,每次该数字记录更新则判断一次是否大于1,是则直接输出并退出循环
#include <iostream>
#include <vector>
#define MAX_SIZE 10000
using namespace std;
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param numbers int整型vector
* @return int整型
*/
int duplicate(vector<int>& numbers) {
// write code here
// 数组非法判定
if (numbers.size() <= 0) {
cout << -1;
return -1;
}
int result; // 最终输出答案
int count[MAX_SIZE] = {0};
for (int number : numbers) {
count[number]++;
if (count[number] > 1) {
result = number;
break;
}
}
cout << result;
return result;
}
};
方法二:数组重排
基本思路:
对数组重新排序,在排序过程中会有比较的过程,如果有相等的情况则可以输出返回
#include <iostream>
#include <vector>
using namespace std;
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param numbers int整型vector
* @return int整型
*/
int duplicate(vector<int>& numbers) {
// write code here
if (numbers.size() <= 0) {
cout << -1;
return -1;
}
int index = 0, length = numbers.size();
while (index < length) {
if (numbers[index] == index) {
index++;
continue;
} else {
if (numbers[numbers[index]] == numbers[index]) {
// 如果当前指针所指位置上的数字 == 该数字所指示的数组位置上的数字
// 说明该数字即为所求重复数字
cout << numbers[index];
return numbers[index];
} else {
// 如果不等,则调整位置
swap(numbers[numbers[index]], numbers[index]);
}
}
}
return 0;
}
};
#剑指offer#
查看7道真题和解析