异或求数组中唯二的出现奇数次的数
注意到如果数组中只有一个出现奇数次的数,那么异或和就是答案,现在异或和xor1=a^b,
求xor1的lowbit,再遍历一遍,易知a和b必然有一个&lowbit=0,那么把这样的数找出来,就可以得到其中一个数xor2,xor2^xor1就是另一个数了
class Solution {
public:
vector<int> singleNumber(vector<int>& nums) {
int eor1 = 0;
for (int x : nums) {
eor1 ^= x;
}
// 为什么这么写?自己去查!语言问题自己搞定
unsigned int rightOne = (unsigned int)eor1 & (-(unsigned int)eor1);
int a = 0;
for (int x : nums) {
if (((unsigned int)x & rightOne) == 0) {
a ^= x;
}
}
return {a, eor1 ^ a};
}
};

浙公网安备 33010602011771号