# 260 - Single Number III

解法一 - set

可以用 set,如果 set 裡面沒有,就把 num 放進 set,如果有,就把 num 移出 set。set 中最後剩下的兩個 num 就是答案。雖然時間只需 O(n),但空間也是 O(n)。

class Solution {
public:
    vector<int> singleNumber(vector<int>& nums) {
        unordered_set<int> s;

        for(int& num: nums) {
            if(!s.count(num)) {
                s.insert(num);
            }
            else {
                s.erase(num);
            }
        }

        vector<int> res(s.begin(), s.end());
        return res;
    }
};

解法二 - Bitmask

實作可參考:

class Solution {
public:
    vector<int> singleNumber(vector<int>& nums) {
        int bitmask = 0;
        for(const int& num: nums) {
            bitmask ^= num;
        }

        int diff = bitmask & (~bitmask + 1);

        int x = 0;
        for(const int& num: nums) {
            if((num & diff) != 0) {
                x ^= num;
            }
        }

        return {x, bitmask^x};
    }
};

Last updated