题解 | #数组中值出现了一次的数字#

数组中值出现了一次的数字

http://www.nowcoder.com/practice/200d8d789f9f431999fac795bb094356

#include<bits/stdc++.h>
using namespace std;
int main(){
    int n;
    cin>>n;
    int *arr=new int[n];
    int eor1=0;
    for(int i=0;i<n;i++)
    {
        cin>>arr[i];
        eor1^=arr[i];
    }
    //结束后eor1的值就为出现次数为奇数的那两个数的异或
    //因为这两个数不一样所以他们的异或肯定不为0,所以二进制形式下肯定不全为0
    int right=eor1&(~eor1+1);//这个操作为通过位运算提取出一个二进制数在最右边的1(百度)
    //所以可以通过right这个数将数组化成两个阵营,一个是和righ相与&为0的,一个是相与&不为0的
    //这两个不同的奇数肯定是各自属于不同的阵营,因为他们在right这个位置上的二进制数一个为1另一个肯定为0
    int eor2=0;
    for(int i=0;i<n;i++){
        if((arr[i]&right)==0){//这个相与必须加括号不然过不了,大坑。。。。有大佬知道的解释下
            eor2^=arr[i];
        }
    }
    eor1=eor1^eor2;
    if(eor1<eor2){
        cout<<eor1<<" "<<eor2<<endl;
        return 0;
    }
    cout<<eor2<<" "<<eor1<<endl;
    return 0;
}
全部评论

相关推荐

威猛的小饼干正在背八股:挂到根本不想整理
点赞 评论 收藏
分享
一个菜鸡罢了:哥们,感觉你的简历还是有点问题的,我提几点建议,看看能不能提供一点帮助 1. ”新余学院“别加粗,课程不清楚是否有必要写,感觉版面不如拿来写一下做过的事情,教育经历是你的弱势就尽量少写 2. “干部及社团经历”和“自我评价”删掉 3. 论文后面的“录用”和“小修”啥的都删掉,默认全录用,问了再说,反正小修毕业前肯定能发出来 4. 工作经验和研究成果没有体现你的个人贡献,着重包装一下个人贡献
点赞 评论 收藏
分享
最近又搬回宿舍了,在工位坐不住,写一写秋招起伏不断的心态变化,也算对自己心态的一些思考表演式学习从开始为实习准备的时候就特别焦虑,楼主一开始选择的是cpp后端,但是24届这个方向已经炸了,同时自己又因为本科非92且非科班,所以感到机会更加迷茫。在某天晚上用java写出hello&nbsp;world并失眠一整晚后选择老本行干嵌入式。理想是美好的,现实情况是每天忙但又没有实质性进展,总是在配环境,调工具,顺带还要推科研。而这时候才发现自己一直在表演式学习,徘徊在设想如何展开工作的循环里,导致没有实质性进展。现在看来当时如果把精力专注在动手写而不是两只手端着看教程,基本功或许不会那么差。实习的焦虑5月,楼主...
耶比:哲学上有一个问题,玛丽的房间:玛丽知道眼睛识别色彩的原理知道各种颜色,但是她生活在黑白的房间里,直到有一天玛丽的房门打开了她亲眼看到了颜色,才知道什么是色彩。我现在最大可能的减少对非工作事情的思考,如果有一件事困扰了我, 能解决的我就直接做(去哪里或者和谁吵架等等……),解决不了的我就不想了,每一天都是最年轻的一天,珍惜今天吧
投递比亚迪等公司10个岗位 > 秋招被确诊为…… 牛客创作赏金赛
点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务