只出现一次的数字3(力扣)
给定一个整数数组 nums
,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。
输入: [1,2,1,3,2,5]
输出: [3,5]
#include<iostream>
#include<vector>
using namespace std;
vector<int> singleNumber(vector<int>& nums) {
int val=0;
for(auto& e : nums)
{
val^=e;
}
int i=0;
for(i=0;i<32;i++)
{
if((val>>i)&1==1) //找到1的位置
{
break;
}
}
int m=0,n=0;
vector<int> ret;
for(int j=0;j<nums.size();j++)
{
if((nums[j]>>i&1)==1)
{
m^=nums[j];
}
else
{
n^=nums[j];
}
}
ret.push_back(m);
ret.push_back(n);
return ret;
}
int main()
{
vector<int> v;
vector<int> vv;
v.push_back(1);
v.push_back(1);
v.push_back(2);
v.push_back(2);
v.push_back(5);
v.push_back(6);
vv=singleNumber(v);
for(auto& s : vv)
{
cout<<s<<" ";
}
cout<<endl;
return 0;
}