数组中只出现一次的数字

题目描述

一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
 
思路:将数字分成两组,每组包含一个只出现一次的数字,再异或求解,时间复杂度为O(logn),空间复杂度为O(1)
 1 class Solution {
 2 public:
 3     void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {
 4         if(data.size()==0)return;
 5         int num=data[0];
 6         for(int idx=1; idx<data.size(); ++idx)
 7         {
 8             num=num^data[idx];
 9         }
10         if(num==0)return;
11         int tmp=1;
12         while(!(tmp&num))tmp=tmp<<1;
13         *num1=0;
14         *num2=0;
15         for(int idx=0; idx<data.size(); ++idx)
16         {
17             if(tmp & data[idx])
18             {
19                 *num1=(*num1)^data[idx];
20             }else{
21                 *num2=(*num2)^data[idx];
22             }
23         }
24     }
25 };

 

posted @ 2018-01-31 20:32  jeysin  阅读(134)  评论(0编辑  收藏  举报