请达人分析一个小算法时间复杂度
一个无序数组,0到n-1,随机取一个替换另外一个,如{0,3,2,1} ==> {0,3,2,3},这就有一个重复的数了:3
要求求出这个重复数,要求TC为O(N)。
帮忙分析下面这个,时间复杂度是多少?详细点哦:)
当然更希望给出O(N)的正解:)
#include <stdio.h>
int duplicated(int a[], int N)
{
int i = 0, ai;
while(i<N) {
ai = a[i];
if(ai == i)
i++;
else if(ai != a[ai]) {
a[i] ^= a[ai];
a[ai] ^= a[i];
a[i] ^= a[ai];
}
else
return a[i];
}
return -1;
}
int main()
{
int ary[] = {1,6,2,4,3,7,5,3};
int d = duplicated(ary, 8);
printf("d=%d\n", d);
return 0;
}