数组中只出现一次的数字

题目描述

任何一个数字异或它自己都等于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 };

 

posted @ 2015-11-04 20:35  疯狂的癫子  阅读(147)  评论(0编辑  收藏  举报