//只有2个数出现1次,其余的数都出现2次
class Solution {
public:
vector<int> singleNumber(const vector<int>& nums) {
int diff = accumulate(nums.begin(), nums.end(), 0, bit_xor<int>());
diff &= -diff;
vector<int> res(2, 0);
for (auto &a : nums) {
if (a & diff) {
res[0] ^= a;
}
else {
res[1] ^= a;
}
}
return res;
}
};
//只有1个数出现1次,其余的数都出现3次
class Solution {
public:
int singleNumber(const std::vector<int>& nums) {
int one = 0, two = 0, three = 0;
for (int i = 0; i < nums.size(); ++i) {
two |= one & nums[i];
one ^= nums[i];
three = one & two;
one &= ~three;
two &= ~three;
}
return one;
}
};