leetcode260. 只出现一次的数字 III

给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。

示例 :

输入: [1,2,1,3,2,5]
输出: [3,5]

 

class Solution {
public:
    vector<int> singleNumber(vector<int>& nums) {
        int bitmask = 0;
        for(auto& x:nums)
        {
            bitmask^=x;
        }
        //a,b是答案要求的两个数
        //bitmask = a^b
        int diff = bitmask&(-bitmask);
        //diff中唯一的1位是a和b的差别
        int a = 0;
        for(auto& x:nums)
        {
            //x&diff会筛掉a或b
            if(x&diff)
            {
                a^=x;
            }
        }
        //因为筛掉了a,b中的一个,所以a现在是要求的数中的一个
        //bitmask^a = a^b^a = b
        return vector<int>{a,bitmask^a};

    }
};

  

 

posted @ 2020-03-26 11:09  rxh1999  阅读(117)  评论(0)    收藏  举报