题目描述:
一个整型数组里除了两个数字之外,其他的数字都出现了两次。
请写程序找出这两个只出现一次的数字。
你可以假设这两个数字一定存在。
样例
输入:[1,2,3,3,4,4]
输出:[1,2]
算法:
class Solution {
public:
vector<int> findNumsAppearOnce(vector<int>& nums) {
vector<int>cnt(2);
if(nums.size()<2)
return cnt;
int a = 0;
for(int i=0; i<nums.size(); i++)
{
a = (a ^ nums[i]);
}
int digit = numofdigit(a);
vector<int>s1;
vector<int>s2;
for(int i=0; i<nums.size(); i++)
{
if((nums[i] & digit) == 0 )
{
s1.push_back(nums[i]);
}
else
{
s2.push_back(nums[i]);
}
}
a = 0;
for(int i=0; i<s1.size(); i++)
{
a = (a ^ s1[i]);
}
int b = 0;
for(int i=0; i<s2.size(); i++)
{
b = (b ^ s2[i]);
}
cnt[0] = a;
cnt[1] = b;
return cnt;
}
int numofdigit(int x)
{
int flag = 1;
while(flag != 0)
{
if((flag & x) == 0)
{
flag = (flag << 1);
}
else
return flag;
}
}
};