关闭

数组中只出现一次的数字

126人阅读 评论(0) 收藏 举报
分类:

题目描述

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

思路:先把数组中所有数字异或得到一个值。然后取出这个值中为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;
    }
};
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:18111次
    • 积分:1082
    • 等级:
    • 排名:千里之外
    • 原创:93篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条