Acwing73

哈希表

时空复杂度 O(n)

class Solution {
public:
    vector<int> findNumsAppearOnce(vector<int>& nums) {
        unordered_map<int,int> m;
        vector<int> res;
        for(auto x : nums) m[x]++;
        for(auto x : nums){
            if(m[x] == 1)
                res.push_back(x);
        }
        return res;
    }
};

令所有元素的相异或得sum,sum = a ^ b.找出a,b不同的位,再根据找到的不同的位分成两组分别异或,可得出答案。

时间复杂度O(n),空间复杂度O(1).

class Solution {
public:
    vector<int> findNumsAppearOnce(vector<int>& nums) {
        int sum = 0, k = 0, l = 0;
        for(auto x : nums) sum ^= x;
        while(!((sum>>k) & 1)) k++;
        for(auto x : nums){
            if(x >> k & 1)
                l ^= x;
        }
        return vector<int>{l,l^sum};
    }
};
posted @ 2023-01-30 21:27  破忒头头  阅读(20)  评论(0)    收藏  举报