找出数组中只出现一次的两个数

来源:互联网 发布:c语言单链表反转 编辑:程序博客网 时间:2024/05/17 08:50

题目大意:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是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);}
原创粉丝点击