题目描述
一个整型数组里除了两个数字之外,其他的数字都出现了偶数次。请写程序找出这两个只出现一次的数字。
class Solution {
public:
void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {
int temp=0;
for(auto item:data)
temp ^= item; //元素异或结果
temp = (temp&(-temp)); //异或结果最右边的1的位置为temp
*num1 = 0;
*num2 = 0;
for(auto item:data)
{
int flag = (temp^item)&(-(temp^item));
if(flag == temp) //将元素分为二侧,根据元素的temp位置是否为1
*num1 ^= item;
else
*num2 ^= item;
}
}
};
本文介绍了一种算法,用于从一个整型数组中找到两个只出现一次的数字,其余数字均出现偶数次。通过使用异或操作,算法首先找到区分两个唯一数字的特征位,然后根据该位将数组分为两组,分别进行异或运算得到结果。
174

被折叠的 条评论
为什么被折叠?



