给定一个整数数组 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};
}
};