题目描述:
给定一个整数数组
nums
,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。
示例 :
输入:[1,2,1,3,2,5]
输出:[3,5]
注意:
- 结果输出的顺序并不重要,对于上面的例子,
[5, 3]
也是正确答案。- 你的算法应该具有线性时间复杂度。你能否仅使用常数空间复杂度来实现?
算法:
位运算的应用
class Solution {
public:
vector<int> singleNumber(vector<int>& nums) {
vector<int >cnt(2);
if(nums.size() < 1)
return cnt;
int a = 0;
for(int i=0; i<nums.size(); i++)
{
a ^= nums[i];
}
int num = NumthOfA(a);
vector<int>value1, value2;
for(int i=0; i< nums.size(); i++)
{
if((nums[i] & num)>0)
value1.push_back(nums[i]);
else
value2.push_back(nums[i]);
}
int m = 0, n = 0;
for(int i=0; i<value1.size(); i++)
{
m ^= value1[i];
}
for(int i=0; i<value2.size(); i++)
{
n ^= value2[i];
}
cnt[0] = m;
cnt[1] = n;
return cnt;
}
int NumthOfA(int a)
{
int flag = 1;
while(flag != 0 )
{
if((flag & a) >0)
return flag;
flag = flag << 1;
}
return 0;
}
};