//得到重复的数字
*
题目描述
在一个长度为n的数组里的所有数字都在0到n-1的范围内。
数组中某些数字是重复的,但不知道有几个数字是重复的。
也不知道每个数字重复几次。请找出数组中任意一个重复的数字。
*
题目描述
在一个长度为n的数组里的所有数字都在0到n-1的范围内。
数组中某些数字是重复的,但不知道有几个数字是重复的。
也不知道每个数字重复几次。请找出数组中任意一个重复的数字。
例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者3。*/
#include <iostream>
using namespace std;
void swap(int* m,int* n)
{
int temp=*m;
*m=*n;
*n=temp;
}
bool duplicate(int numbers[], int length, int* duplication) {
if(numbers==null||length<=0)
return false;
int count=0;
duplication[0]=-1;
bool res=false;
int i=0;
while(i<length)
{
if(numbers[i]==i)
i++;
else
{
if(numbers[numbers[i]]==numbers[i]&&(count==0||duplication[count-1]!=numbers[i]))
{
res=true;
duplication[count]=numbers[i];
count++;
i++;
}else
{
while(numbers[i]!=i)
{
if(numbers[numbers[i]]==numbers[i])
{
if(count==0||duplication[count-1]!=numbers[i])
{
res=true;
duplication[count]=numbers[i];
count++;
}
break;
}
swap(&numbers[i],&numbers[numbers[i]]);
}
i++;
}
}
}
return res;
}
void main()
{
int number[20]={1,2,6,1,8,0,5,7,3,4,1,2,2,5,6};
/*int number[20]={2,1,3,1,4};*/
int res[20];
cout<<duplicate(number,15,res);
for(int i=0;number[i]!=null;i++)
cout<<number[i]<<" ";
system("pause");
}