题目:
一个数组中只有两个数字是出现一次, 其他所有数字都出现了两次。 找出这两个数字,编程实现。
#include<stdio.h>
#include<assert.h>
void FindTwoDifferent(int *arr, int len)
{
int fin = 0;
int i = 0;
int pos = 0;
int x = 0;
int y = 0;
assert(arr);
for (i = 0; i < len; i++)
{
fin ^= arr[i];
}
for (i = 0; i < 32; i++)
{
if(((fin >> i) & 1) == 1)
{
pos = i;
break;
}
}
for (i = 0; i < len; i++)
{
if(((arr[i] >> pos) & 1) == 1)
x ^= arr[i];
else
y ^= arr[i];
}
printf("Different Two:%d %d\n",x,y);
}
int main()
{
int arr[] = {1, 2, 3, 3, 2, 1, 4, 5};
int sz = sizeof(arr)/sizeof(arr[0]);
FindTwoDifferent(arr, sz);
return 0;
}