题目
题解思路
通过异或整个数组,我们可以得到那两个只出现一个的数的异或合。
再通过这个数的的必然存在的二进制位的1。(这样的话有一个数必然包含这个1,另一个数必定不包含)
将原数组分为两部分,分布异或出答案。
AC代码
class Solution {
public:
vector<int> singleNumber(vector<int>& nums) {
vector <int> ans (2,0) ;
int p1 = 0 , p2 = 0 , p3 = 0 ;
for (int i = 0 ; i < nums.size() ; i++ )
{
if ( i == 0 )
{
p1 = nums[i] ;
}else
{
p1 ^= nums[i] ;
}
}
for (int i = 0 ; i < 31 ; i++ )
{
if ( p1 & ( 1 << i ) )
p2 = i ;
}
for (int i = 0 ; i < nums.size() ; i++ )
{
if ( nums[i] & (1 << p2 ) )
ans[0] ^= nums[i] ;
else
ans[1] ^= nums[i] ;
}
return ans ;
}
};