题目描述
思路分析
位运算
先把所有数异或,最终结果中找某位不同的数。然后把所有数按照该为1/0分类。每类的结果对应一个答案。
代码实现
class Solution {
public:
vector<int> singleNumber(vector<int>& nums) {
int res=0;
for(auto x:nums) res^=x;
int k=0;
while((res>>k&1)==0) k++;
int a=f(nums,0,k),b=f(nums,1,k);
return {a,b};
}
int f(vector<int>& nums,int flag,int k){
int res=0;
for(auto x:nums)if((x>>k&1)==flag)res^=x;
return res;
}
};