1. 程式人生 > >使用異或解題 —— 序列中僅出現一次的兩個數

使用異或解題 —— 序列中僅出現一次的兩個數

  • 如果一個序列除了某個數出現一次(奇數次)外,其他數均出現兩次(偶數次),最終全部異或的結果會是這個出現一次(奇數次)的數;

  • 如果一個序列所有的數均出現兩次(偶數次),最終全部異或的結果會是 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]; } }