面试题---找出数组中两个只出现一次的数

Posted

tags:

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

题目描述:给一个数组,里面有两个数只出现一次,其它的数都出现两次,请找出这两个数;

样例:输入 2 4 2 7 4 9

        输出 7 9

思路:假定要找出的这两个数为x、y   把所有的数异或,结果是x与y异或的值,那么肯定不为0,那么这个值的二进制至少有一位为1,也就是说x和y的二进制在这一位上必定一个为0,一个为1,那么可以根据这一位把这个数组分成两个数组,x和y在不同的数组里,接下来对每个数组直接异或出的值就是结果了;

 

代码如下:

#include <iostream>
#include <cstdio>
using namespace std;
int num1,num2;

int singleNumber(int nums[],int length)
{
    num1=num2=0;
    if(length<2) return -1;
    int re=0;
    for(int i=0;i<length;i++)
      re^=nums[i];

    int ind=0;
    while((re&1)==0&&(ind<8*sizeof(int)))
    {
        re=re>>1;
        ++ind;
    }
    for(int j=0;j<length;++j)
    {
        int t=(nums[j]>>ind)&1;
        if(t) num1^=nums[j];
        else num2^=nums[j];
    }
}
int main()
{
    int nums[100]={2,4,2,7,4,9};
    singleNumber(nums,6);
    cout<<num1<<" "<<num2<<endl;
    return 0;
}

 

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

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

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

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

在数组中找出只出现一次的两个数

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

C语言编程 找出数列中只出现一次的两个数