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