alg-查找只出现一次的数

//只有2个数出现1次,其余的数都出现2次
class Solution {
public:
    vector<int> singleNumber(const vector<int>& nums) {
        int diff = accumulate(nums.begin(), nums.end(), 0, bit_xor<int>());
        diff &= -diff;
        vector<int> res(2, 0);
        for (auto &a : nums) {
            if (a & diff) {
                res[0] ^= a;
            }
            else {
                res[1] ^= a;
            }
        }
        return res;
    }
};
//只有1个数出现1次,其余的数都出现3次
class Solution {
public:
    int singleNumber(const std::vector<int>& nums) {
        int one = 0, two = 0, three = 0;
        for (int i = 0; i < nums.size(); ++i) {
            two |= one & nums[i];
            one ^= nums[i];
            three = one & two;
            one &= ~three;
            two &= ~three;
        }
        return one;
    }
};
posted @ 2019-08-05 15:42  JohnRed  阅读(197)  评论(0编辑  收藏  举报