数组中只有一个数出现一次,其他的数都出现2次,找出出现一次的数字,要求O(n),不使用辅助空间。
#include <stdio.h>
void PrintArry(int a[],int len)
{
int i = 0;
for (; i < len; i++)
{
printf("%d ",a[i]);
}
printf("\n");
}
int fun(int a[],int len)
{
int result = a[0];
int i = 1;
for (; i < len;i++)
{
result ^= a[i];
}
return result;
}
int main()
{
int a[] = {1,2,4,1,7,5,4,2,7};
int b[] = {1,3,3,1,4,5,3,1,4,1,3};
int res = 0;
int len = sizeof(a)/sizeof(a[0]);
int len1 = sizeof(b)/sizeof(b[0]);
PrintArry(a,len);
res = fun(a,len);
prtinf("%d\n", res);
PrintArry(b,len1);
res = fun(b,len1);
prtinf("%d\n", res);
return 0;
}
其实只要其他数字出现的都是偶数次,这个方法都可以。