給定整數數組,其中恰好兩個元素只出現一次,其餘均出現兩次。找出這兩個元素。要求線性時間、常數空間。
xor_all = a ^ b(a、b 為目標數)。xor_all 中任一為 1 的位(如最低位 diff = xor_all & (-xor_all))。class Solution {
public:
vector<int> singleNumber(vector<int>& nums) {
int xor_all = 0;
for (int x : nums) xor_all ^= x;
int diff = xor_all & (-xor_all); // 保留最低位 1
int a = 0, b = 0;
for (int x : nums) {
if (x & diff) a ^= x;
else b ^= x;
}
return {a, b};
}
};