您的位置:首页 > 其它

数组中只出现一次的数字(异或方法)

2015-09-13 17:34 162 查看


题目描述

一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。

思路:使用异或,但是与在成对出现的数字中查找一个单独的数字不同的是需要利用异或结果的最低位为1的flag将数组中的数字分为两类,一类是与flag按位与为0,另一类为不为0,这样再分别异或一次就能够找出这两个数。很是巧妙。其中有一个语法上容易忽略的坑:==的优先级比&高,所以&时需要加括号。

代码:

void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {
if(data.size() < 2)
return;
int num = 0,bie = 1;
for(int i = 0;i < data.size();i++){
num ^= data[i];
}
while(!(num & bie))
bie = bie << 1;
for(int i = 0;i < data.size();i++){
if(data[i] & bie)
*num1 ^= data[i];
else
*num2 ^= data[i];
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: