zero的博客

不积跬步无以至千里

数组中只出现一次的数字

题目描述

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

思路:先把数组中所有数字异或得到一个值。然后取出这个值中为1的一位,可以把整个数组分成该位为1和该位为0的两组。分别对两组异或,就能得到这两个数。PS:[1]样例真的是坑

class Solution {
public:
    void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {
        if(data.size()==0)
            return;
        if(data.size()==1){
            (*num1)=(*num2)=0;
            return;   
        }
        int num=0,len=data.size(),x=1,x1=0,x2=0;
        for(int i=0;i<len;i++){
            num^=data[i];
        }
        while(!(num&x)){
            x=(x<<1);
        }
        for(int i=0;i<len;i++){
            if(data[i]&x){
                x1^=data[i];   
            }
            else{
                x2^=data[i];
            }
        }
        (*num1)=x1;
        (*num2)=x2;
    }
};
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_18952073/article/details/51538869
个人分类: 剑指offer
上一篇04-树4 是否同一棵二叉搜索树
下一篇06-图2 Saving James Bond - Easy Version
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭