question:
Given an array of numbers
nums
, in which exactly two elements appear only once and all the other elements appear exactly twice. Find the two elements that appear only once.
For example:
Given
nums = [1, 2, 1, 3, 2, 5]
, return
[3, 5]
.
解题思路:
考虑位操作,对所有元素做异或操作,那么最后得到的值就是要求的两个元素异或得到的,那么找出其中为1的某一位,说明这一位两个数一个为0,一个为1,以这一位为标准,把数组的元素分为两组A、B,那么要求的两个元素肯定是一个在A组,一个在B组,而对这两组各自做异或操作,就可以得到两个数就是要求的。
vector<int> singleNumber(vector<int>& nums) {
vector<int> result(2,0);
int tmp = nums[0];
for(int i = 1; i < nums.size(); i++)
{
tmp = tmp ^ nums[i];
}
tmp &= -tmp;
vector<int> num1, num2;
for(int i = 0; i < nums.size(); i++)
{
if(nums[i] & tmp)
{
num1.push_back(nums[i]);
}
else
{
num2.push_back(nums[i]);
}
}
tmp = num1[0];
for(int i = 1; i < num1.size(); i++)
{
tmp ^= num1[i];
}
result[0] = tmp;
tmp = num2[0];
for(int i = 1; i < num2.size(); i++)
{
tmp ^= num2[i];
}
result[1] = tmp;
return result;
}