有一个数组长度为N,里面的N个数的范围是[1, N-1],因此必有数是重复出现的。求一个算法找出这个数,要求时间复杂度为O(n),空间复杂度为O(1)。
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int a[]={1,2,4,3,6,3,4};
int tmp,tmp2;
tmp=a[0];
while(1)
{
if(a[tmp]!=-1)
{
tmp2=a[tmp];
a[tmp]=-1;
tmp=tmp2;
}
else break;
}
printf("%d\n",tmp);
}