问题描述:
给出2n+1个数
其中有n个数是成对出现的
找出里面只出现了一次的那个数
当然 如果先快排完了 排除掉相同的数 当然可以找到那个只出现过一次的数
但是快排的复杂度是n*logn
据说可以用O(n)复杂度和O(1)的额外空间解决
原帖地址:http://topic.csdn.net/u/20091029/18/aa257244-c489-4ed7-8ccb-09c619d01b7c.html
利用^操作符,将数组中的数字逐位异或,如果是与自身相同的数字异或则结果为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; }