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

首先判断数组的长度,小于2就返回;将整个数组进行异或处理,相同为0,不同为1,最后剩只出现一次的数。定义了一个标志位sign,找到totalNum第一个为1的位,将数组data分成两部分,一部分为1的位,另一部分为0的位,基于此,将整个数组在遍历一遍。把数组中第sign为0的数异或,结果放到num1中,在把数组中第sign为1的数异或,结果放到num2中,最后输出!!!

class Solution {
public:
    void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {
       if(data.size()<2) return ;
       int tolalNum = 0;
       for(int i=0;i<data.size();i++){
        tolalNum^= data[i];
       } 
       int sign = 0;
       for(;sign<data.size();sign++){
        if((tolalNum&(1<<sign))!=0){
            break;
        }

       }
       cout<<sign<<endl;
       num1[0]=0;
       num2[0]=0;
       for(int i=0;i<data.size();i++){
        if((data[i]&(1<<sign))==0){
            num1[0]^=data[i];
            cout<<"0"<<data[i]<<" "<<(1<<sign)<<endl;

        }
        else{
            num2[0]^=data[i];
            cout<<"1"<<data[i]<<" "<<(1<<sign)<<endl;
        }
       }
       cout<<num1[0]<<num2[0]<<endl;

    }
};

#剑指offer##23届找工作求助阵地#
全部评论

相关推荐

霁华Tel:秋招结束了,好累。我自编了一篇对话,语言别人看不懂,我觉得有某种力量在控制我的身体,我明明觉得有些东西就在眼前,但身边的人却说啥也没有,有神秘人通过电视,手机等在暗暗的给我发信号,我有时候会突然觉得身体的某一部分不属于我了。面对不同的人或场合,我表现出不一样的自己,以至于都不知道自己到底是什么样子的人。我觉得我已经做的很好,不需要其他人的建议和批评,我有些时候难以控制的兴奋,但是呼吸都让人开心。
点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务