1、先异或找到不同数字的的区别位
然后相与分成2组
2、
class Solution {
public:
vector<int> singleNumbers(vector<int>& nums) {
int ret = 0;
int a=0;int b = 0;
for(int i = 0; i < nums.size(); i++)
{
ret ^=nums[i];
}
int div =1;
while((div & ret) == 0)
{
div <<= 1;
}
for(int i = 0; i < nums.size(); i++)
{
if(nums[i]&div)
{
a ^=nums[i];
}else{
b ^=nums[i];
}
}
return vector<int>{a,b};
}
};
3、最开始用的map
class Solution {
public:
vector<int> singleNumbers(vector<int>& nums) {
unordered_map<int,int> mp;
vector<int> ans;
for(auto a : nums)
{
mp[a]++;
}
for(auto c: mp)
{
if(c.second == 1)
{
ans.emplace_back(c.first);
}
}
return ans;
}
};