题目描述
任何一个数字异或它自己都等于0
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
1 class Solution { 2 public: 3 int f(int num){ 4 int s=0; 5 while((num&1)==0) 6 { 7 num=num>>1; 8 s++; 9 } 10 return s; 11 12 } 13 bool g(int num,int x){ 14 num= num>>x; 15 if(( num&1)==0) 16 return false; 17 else 18 return true; 19 20 } 21 void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) { 22 int len=data.size(); 23 if(len<2) 24 return; 25 int s=0,i; 26 for(i=0;i<len;i++) 27 s^=data[i]; 28 int d=f(s); 29 *num1=*num2=0; 30 for(i=0;i<len;i++) 31 { 32 if(g(data[i],d)) 33 *num1^=data[i]; 34 else 35 *num2^=data[i]; 36 } 37 38 } 39 };