数组中只出现一次的数字

2020-05-18  本文已影响0人  su945

题目描述

一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。

问题分析

可以利用异或的性质,如果存在两个只出现一次的数字,那么异或结果一定是两个不相同数字的异或结果。

解题思路1

class Solution {
public:

    bool isBiteOne(int data,int index)
    {
        data = data >> index;
       return (data &1);
    }

    void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {
        if (data.size() <2)
        {
            return;
        }
        //异或计算
        int tmp = data[0];
        for(int i = 1; i < data.size(); ++i)
        {
            tmp = tmp ^ data[i];
        }
        if (tmp == 0)
        {
            return;
        }
        //记录最左边为1的位置
        int index = 0 ;
        while ((tmp & 1) == 0)
        {
            tmp = tmp >> 1 ;
            index++;
        }
        *num1=*num2=0;
        for(int i = 0; i < data.size(); ++i)
        {
            if (isBiteOne(data[i],index))
            {
                *num1 = *num1 ^ data[i];
            }
            else
            {
                *num2 = *num2 ^ data[i];
            }
        }

    }
};
上一篇下一篇

猜你喜欢

热点阅读