题解 | #数组中重复的数字#
数组中重复的数字
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#