微软100题(61)找出数组中两个只出现一次的数字

来源:互联网 发布:网络平台 三方支付协议 编辑:程序博客网 时间:2024/06/10 08:30
题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。
请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。

思路:两个相同的数字异或等于量,那么所有数字异或就是这两个数字异或的和
          这个异或的和肯定有一位不为零,而且这一位 那两个数字该位上 不一样
void FindTheTwoOnceNum(vector<int> data){int n = data.size();int answer1 = 0;int answer2 = 0;int temp=0;int j;for (int i=0;i<n;++i)temp ^= data[i];for (j=0;j<32;j++)if(temp>>j & 0x1)break;for (int i=0;i<n;++i){if(data[i]>>j & 0x1)answer1 ^= data[i];elseanswer2 ^= data[i];}cout<<"the two once numbers are"<<answer1<<" "<<answer2;}


0 0
原创粉丝点击