44.数组中重复的数字
题目内容:
代码及思路:
根据题目内容有两个重要信息:
1.长度为n的数组中的数字大小在0-(n-1)范围之内
2.找出第一个重复数字就可以
#include<iostream>
#include<unordered_map>
#include<vector>
using namespace std;
class Solution
{
public:
bool duplicate(int* numbers, int length, int* duplication)
{
//其中duplication表示的是最后输出的数组,numbers是原始输入
if (length <=0)
return false;
//对数组中的数字范围进行判断
for (int i = 0; i < length; i++)
{
if (numbers[i] > length - 1 || numbers[i] < 0)
return false;
}
//因为涉及到计数,所以第一个想到的解法是利用哈希表
unordered_map<int, int> hash;
for (int i = 0; i < length;i++)
{
hash[numbers[i]]++;
}
int index = 0;
for (int i = 0; i < length; i++)
{
if (hash[numbers[i]] > 1)
{
duplication[index++] = numbers[i];
return true;
}
}
return false;
}
};
void main()
{
Solution* object = new Solution;
vector<int> numbers;
int num;
char ch;
do
{
cin >> num;
numbers.push_back(num);
cin.get(ch);
} while (ch == ',');
vector<int> duplication;
int dup[] = { 0 };
int* number = &numbers[0];
bool res = object->duplicate(number, numbers.size(), dup);
cout << res << endl;
}