
解法一
异或运算有个重要的性质,两个相同数字异或为 0 ,即对于任意整数 a,有a⊕a=0 。题中有两个不同的数字,需要把二者分组,各组别自行异或,最终可以获得落单的数字。
class Solution {
public:
vector<int> singleNumbers(vector<int>& nums) {
int x=0,y=0,n=0,m=1;
for(int num:nums ){
n^=num;//遍历异或
}
while((n&m)==0){
m<<=1;//循环左移
}
for(int num:nums){//遍历nums分组
if(num&m) x^=num;//假设num&m==1
else y^=num;//假设num&m!=1
}
return vector<int>{x,y};//返回出现一次的数组
}
};
本文介绍了一种使用异或运算解决数组中出现一次数字的问题的方法。通过两次遍历数组并利用异或的特性,可以有效地找出数组中只出现一次的两个数字。
1208

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



