使用異或解題 —— 序列中僅出現一次的兩個數
阿新 • • 發佈:2019-02-16
如果一個序列除了某個數出現一次(奇數次)外,其他數均出現兩次(偶數次),最終全部異或的結果會是這個出現一次(奇數次)的數;
如果一個序列所有的數均出現兩次(偶數次),最終全部異或的結果會是 0;
如果一個序列除了某 2 個數出現一次(奇數次)外,其他數均出現兩次(偶數次),最終全部異或的結果一定不為 0;
class Solution{
public:
void FindNumsAppearOdds(vector<int> nums, int *num1, int *num2){
if (nums.size() < 2) return;
int myxor = accumulate(nums.begin(), nums.end(), 0, [](int x, int y) { return x^y; });
int flag = 1;
while ((myxor & flag) == 0) flag <<= 1;
*num1 = myxor;
*num2 = myxor;
for (int i = 0; i < nums.size(); ++i)
if (flag & nums[i]) *num1 ^= nums[i];
else *num2 ^= nums[i];
}
}