题目
牛客 BM52 数组中只出现一次的两个数字
Leetcode 260. 只出现一次的数字 III
代码(8.23 首刷看解析)
class Solution {
public:
vector<int> FindNumsAppearOnce(vector<int>& nums) {
int res = 0;
for(int &num : nums)
res ^= num;
int cmp = 1;
while((cmp & res) == 0)
cmp <<= 1; // 找到a和b不相等的位置
// 第一位为1的是数组一,第一位为0的是数组二
int a = 0, b = 0;
for(int& num : nums) {
if((cmp & num) == 0) {
a ^= num;
} else {
b ^= num;
}
}
if(a<b)
return {a, b};
return {b, a};
}
};
代码(9.24 二刷看解析)
class Solution {
public:
vector<int> singleNumber(vector<int>& nums) {
int res = 0;
for(int &num : nums)
res ^= num;
int cmp = 1;
while((cmp & res) == 0)
cmp <<= 1;
int a = 0, b = 0;
for(int& num : nums) {
if(cmp & num)
a ^= num;
else b ^= num;
}
return {a, b};
}
};