题目大意:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。
参考博客:http://blog.csdn.net/fanzitao/article/details/7900764
代码:
#include<cstdio>
using namespace std;
int gt[] = { 1,2,2,3,4,4,5,5,7,7,8,8 };
int main()
{
int ans = 0, pos = 0,len= sizeof(gt) / sizeof(int);
int num1 = 0, num2 = 0;
for (int i = 0;i < len;++i)
ans ^= gt[i];
while (ans)
{
ans >>= 1;
pos++;
}
for (int i = 0;i < len;++i)
{
if (gt[i] & (1 << pos - 1))
num1 ^= gt[i];
else
num2 ^= gt[i];
}
printf("%d %d\n", num1, num2);
}