面试题40 数组中只出现一次的数字

题目描述

一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
 1 class Solution {
 2 public:
 3     
 4     unsigned int FindOne(int num){
 5         int indexBit = 0;
 6         while ((num & 1) == 0 && indexBit < 8 * sizeof(int)){
 7             num >>= 1;
 8             ++indexBit;
 9         }
10         return indexBit;
11     }
12     
13     bool IsBit1(int num, unsigned int indexBit){
14         num >>= indexBit;
15         return num & 1;
16     }
17     
18     void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {
19         if (data.size() < 2)
20             return;
21         int result = 0;
22         for (int j = 0; j < data.size(); j++){
23             result ^= data[j];
24         }
25         int indexOf1 = FindOne(result);
26         for (int j = 0; j < data.size(); j++){
27             if (IsBit1(data[j], indexOf1)){
28                 *num1 ^= data[j];
29             }
30             else
31                 *num2 ^= data[j];
32         }
33     }
34 };

 

posted @ 2016-04-06 13:08  早杰  阅读(146)  评论(0编辑  收藏  举报