美文网首页一起来刷算法题
数组中只出现一次的数字

数组中只出现一次的数字

作者: cherryleechen | 来源:发表于2019-05-06 21:59 被阅读0次

    时间限制:1秒 空间限制:32768K

    题目描述

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

    我的代码

    class Solution {
    public:
        void FindNumsAppearOnce(vector<int> data,int* num1,int* num2) {
            //所有数字异或后出现1的那个位置是只出现一次的两个数字出现不同的位置。
            int s=data.size();
            if(s<2)
                return;
            int tmp=data[0];
            for(int i=1;i<s;i++)
                tmp^=data[i];
            if(tmp==0)
                return;
            int count=0;
            while((tmp&1)==0){
                tmp>>=1;
                count++;
            }
            *num1=0;*num2=0;
            for(int i=0;i<s;i++)
                if(isOne(data[i],count))
                    *num1^=data[i];
                else
                    *num2^=data[i];
            return;
        }
        bool isOne(int x,int id){
            return (x>>id)&1;
        }
    };
    

    运行时间:3ms
    占用内存:472k

    相关文章

      网友评论

        本文标题:数组中只出现一次的数字

        本文链接:https://www.haomeiwen.com/subject/yhhqoqtx.html