一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
链接:https://www.nowcoder.com/questionTerminal/e02fdb54d7524710a7d664d082bb7811
来源:牛客网
class
Solution {
public
:
void
FindNumsAppearOnce(vector<
int
> data,
int
* num1,
int
*num2) {
if
(data.size()<2)
return
;
int
size=data.size();
int
temp=data[0];
for
(
int
i=1;i<size;i++)
temp=temp^data[i];
if
(temp==0)
return
;
int
index=0;
while
((temp&1)==0){
temp=temp>>1;
++index;
}
*num1=*num2=0;
for
(
int
i=0;i<size;i++)
{
if
(IsBit(data[i],index))
*num1^=data[i];
else
*num2^=data[i];
}
}
bool
IsBit(
int
num,
int
index)
{
num=num>>index;
return
(num&1);
}
};
解题思路:异或运算满足交换律和结合律,切同数字异或结果为0,
其次,两个异或的数第一个为1(从左开始),即使两个数不同的第一位