Question:找出数组中重复的数字。在一个长度为n的数组汇总,所有的数字均在0-n-1范围内,数组中某些数字是重复的。找出重复数字。
//解法一
#include<iostream>
#include<vector>
using namespace std;
const int SIZE =7;
void sort(int a[],int size)
{
for (size_t i = 0; i < size; i++)
{
for (size_t j = i + 1; j < size; j++)
{
int tmp;
if (a[i] < a[j])
{
tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
}
}
}
void findRepeatedNum(int a[],int size,vector<int>&b)
{
for (size_t i = 0; i < size; i++)
{
if (a[i]==a[i+1])
{
b.push_back(a[i]);
}
}
}
int main()
{
int array[SIZE] = {0};
vector<int>repeatnum;
cout << "input " << SIZE << " numbers " << endl;
for (size_t i = 0; i < SIZE; i++)
{
cin >> array[i];
}
cout << "the input numbers are: " << endl;
for (size_t i = 0; i < SIZE; i++)
{
cout << array[i]<<" " ;
}
cout << endl;
sort(array, SIZE);
findRepeatedNum(array, SIZE, repeatnum);
cout << "the repeat numbers are: " << endl;
for (int i = 0;i <repeatnum.size();i++)
{
cout << repeatnum[i]<<" ";
}
cout << endl;
system("pause");
return 0;
}
//解法二 STL
#include<iostream>
#include<vector>
#include<set>
#include<algorithm>
using namespace std;
#define SIZE 7
void findRepeatedNum(vector<int>a, set<int>&b)
{
for (int i = 0; i < a.size()-1; i++)
{
if (a[i] == a[i + 1])
{
b.insert(a[i]);
}
}
}
int main()
{
vector<int>array(SIZE);
set<int>repeatnum;
cout << "input numbers:" << endl;
for (size_t i = 0; i < SIZE; i++)
{
cin >> array[i];
}
cout << "the input numbers are: " << endl;
for (size_t i = 0; i < SIZE; i++)
{
cout << array[i] << " ";
}
cout << endl;
sort(array.begin(),array.end());
findRepeatedNum(array,repeatnum);
cout << "the repeat numbers are: " << endl;
for (auto i=repeatnum.begin();i!=repeatnum.end();i++)
{
cout <<*i<< " ";
}
cout << endl;
system("pause");
return 0;
}
//解法三,算法优化
#include<iostream>
#include<vector>
using namespace std;
const int SIZE=7;
bool findrepeatNum(int a[],int size,vector<int>&b)
{
if (a == nullptr || size <= 0)
{
return false;
}
for (size_t i = 0; i <size ; i++)
{
if (a[i] < 0 || a[i] > size - 1)
return false;
}
for (size_t i = 0; i < size; i++)
{
if (i != a[i])
{
if (a[i]==a[a[i]])
{
b.push_back(a[i]);
}
int tmp=a[i];
a[i] = a[tmp];
a[tmp] = tmp;
}
if (i == size)
return true;
}
return false;
}
int main()
{
int array[SIZE] = { 0 };
vector<int>repeatnum;
cout << "input " << SIZE << " numbers " << endl;
for (size_t i = 0; i < SIZE; i++)
{
cin >> array[i];
}
cout << "the input numbers are: " << endl;
for (size_t i = 0; i < SIZE; i++)
{
cout << array[i] << " ";
}
cout << endl;
findrepeatNum(array, SIZE, repeatnum);
cout << "the repeat numbers are: " << endl;
for (int i = 0; i < repeatnum.size(); i++)
{
cout << repeatnum[i] << " ";
}
cout << endl;
system("pause");
return 0;
}