数组中只出现一次的数字

Posted Jeysin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数组中只出现一次的数字相关的知识,希望对你有一定的参考价值。

题目描述

一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
 
思路:将数字分成两组,每组包含一个只出现一次的数字,再异或求解,时间复杂度为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 };

 

以上是关于数组中只出现一次的数字的主要内容,如果未能解决你的问题,请参考以下文章

剑指Offer 数组中只出现一次的数字

剑指offer:数组中只出现一次的数字

数组中只出现一次的数字

求数组中只出现一次的两个数字

数组中只出现一次的数字(数组中唯一只出现一次的数字)

剑指OFFER 数组中只出现一次的数字