数组中只出现一次的数字
Posted icehole
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数组中只出现一次的数字相关的知识,希望对你有一定的参考价值。
题目描述
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
将数组中所有的数字进行异或运算,异或是支持结合律和交换律的,根据异或出来的结果对数字进行分类,每一类异或出来的结果即为对应的不同的数。
1 class Solution { 2 public: 3 void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) { 4 if(data.size() < 2) 5 return; 6 int result = 0; 7 for(int i = 0; i < data.size(); i++){ 8 result = result ^ data[i]; 9 } 10 int index = FindFirstBitIs1(result); 11 *num1 = 0; 12 *num2 = 0; 13 for(int j = 0; j < data.size(); j++){ 14 if(IsBit1(data[j], index)){ 15 *num1 ^= data[j]; 16 } 17 else{ 18 *num2 ^= data[j]; 19 } 20 } 21 22 } 23 int FindFirstBitIs1(int num){ 24 int index = 0; 25 while(((num&1) == 0) && (index < 32)){//找出第一个为1的位置,用来区分两个不同的数 26 index++; 27 num = num>>1; 28 } 29 return index; 30 } 31 bool IsBit1(int num, int index){//找出该位是否为1; 32 num = num>>index; 33 return (num&1); 34 } 35 };
另外一个题目:数组中只出现一次的数字,只有一个数字出现一次,其他数字出现了三次,如何找出?
思路:将每个数字加起来,如果该二进制位可以被三整除,则该位为0,否则为1,。
以上是关于数组中只出现一次的数字的主要内容,如果未能解决你的问题,请参考以下文章