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

Posted 没长大的书生

tags:

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

  题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。

 1 void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {
 2         if(data.size()<=1)
 3             return;
 4         int resultXOR = 0;
 5         for(int i=0;i<=data.size()-1;i++)
 6             resultXOR^=data[i];
 7         int indexOf1 = FindFirstBits1(resultXOR);
 8         *num1=*num2=0;
 9         for(int j=0;j<=data.size()-1;j++){
10             if(isBit1(data[j],indexOf1))
11                 *num1^=data[j];
12             else
13                 *num2^=data[j];
14         }
15     }
16     
17     int FindFirstBits1(int num){
18         int count=0;
19         while((0x1&num)==0){
20             num=num>>1;
21             count++;
22         }
23         return count;
24         
25     }
26     
27     bool isBit1(int num,int indexBit){
28         num=num>>indexBit;
29         return (num&0x1);
30     }

 

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

面试题:找出数组中只出现一次的2个数(异或的巧妙应用)(出现3次)

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

剑指offer 40.知识迁移能力 数组中只出现一次的数字

《剑指offer》第五十六题I:数组中只出现一次的两个数字

40 数组中只出现一次的数字

#yyds干货盘点# 面试必刷TOP101:数组中只出现一次的两个数字