问题描述:
给出2n+1个数
其中有n个数是成对出现的
找出里面只出现了一次的那个数
当然 如果先快排完了 排除掉相同的数 当然可以找到那个只出现过一次的数
但是快排的复杂度是n*logn
据说可以用O(n)复杂度和O(1)的额外空间解决
原Blog地址: 简便方法求解一道算法题目
利用^操作符,将数组中的数字逐位异或,如果是与自身相同的数字异或则结果为0,否则结果为本身。
源代码:
#include<stdio.h>
int Find(int Data[],int N)
{
int i;
static int j;
j=0;
for(i = 0;i < N; )
j ^= Data[i++];
return j;
}
int main()
{
int Data[] = {
1,2,1,2,3,4,3,4,5,6,7,7,6,5,0};
int len = sizeof(Data)/sizeof(Data[0]);
int ret = Find(Data,len);
printf("%d/n",ret);
return 0;
}