首先來看題目要求:
在一個數組中除兩個數字只出現1次外,其它數字都出現了2次, 要求儘快找出這兩個數字。
我是直接在這篇文章的基礎上思考的
http://blog.csdn.net/morewindows/article/details/7354571
#include <iostream>
using namespace std;
void GetTwoDif(int arr[],int count,int group[])
{
int dif = 0,dif2;
int i = 0;
for( i = 0 ; i < count;i++)
dif ^= arr[i];
for( i = 0 ; i < 8*sizeof(int);i++)
{
dif2=(1<<i)&dif;
if( 0 != dif2 )
break;
}
for( i = 0 ; i < count;i++)
{
if( dif2 & arr[i] )
{
group[i] = 1;
}
else
{
group[i] = 2;
}
}
dif = dif2=0;
for( i = 0 ; i < count;i++)
{
if(group[i] == 1)
dif ^= arr[i];
else
dif2 ^= arr[i];
}
cout<<dif<<" "<<dif2<<endl;
}
void main()
{
int arr[]={1,4,3,9,2,5,4,1,2,3};
int group[]={1,4,3,5,2,6,4,1,2,3};
GetTwoDif(arr,10,group);
}