題目:
一個整型數組裏除兩個數字之外,其他數字都出現了兩次。請寫程序找出這兩個只出現一次的數字。要求時間複雜度是O(n),空間複雜度是O(1)。
解析:
利用位運算的異或關係求解,把兩個只出現一次的數分別放入兩個數組中(有出現兩次的必須放在一個數組),再對這兩個數組分別使用異或,即可求出這個兩個只出現一次的數。
參考答案:
class Solution{
public:
vector<int> singleNumbers(vector<int> nums){
int s = 0;
for(int n: nums)
s ^= n;
int k = s & (-s);
vector<int> arr(2, 0);
for(int n : nums){
if(k & n)
arr[0] ^= n;
else
arr[1] ^= n;
}
return arr;
}
};