博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
异或操作的妙用
阅读量:5889 次
发布时间:2019-06-19

本文共 600 字,大约阅读时间需要 2 分钟。

hot3.png

给一个很大的数组,里面有两个数只出现过一次,其他数都出现过两次,把这两个数找出来

void getNum(int a[],int length){    int s = 0;//保存异或结果    for(int i=0;i
>1; k++; } for(int i=0;i
>k)&1) //将s与数组中第k位为1的数进行异或,求得其中一个数 { s=s^a[i]; } } cout<
<<" "<<(s^temp2)<

假设二个不同数值是a,b;那么 s = a^b; 然后求的s中第一次出现1的位置k,根据异或运算特性,第一次出现1的地方就是这二个数位有区别的地方,比如1001 0101 与 1100 0001 得到异或结果是0101 0100 .那么第一次出现1的地方是第三位,a的第三位是1而b是0 。 接着遍历数值,找出第三位是1的数值就异或,得到的结果就是其中一个数与其他出现二次的数求异或,因为出现二次的数异或得到为0所有最后结果就是所求其中一个数。
最后s与该数求异或就得到另一个数。

转载于:https://my.oschina.net/wizardpisces/blog/208573

你可能感兴趣的文章
IPC通信:Posix共享内存2
查看>>
GB2312转成UTF-8
查看>>
C#打开chm定位到特定页面
查看>>
[CareerCup][Google Interview] 寻找动态的中位数
查看>>
javascript操作iframe的那些事
查看>>
servlet相关 jar包位置 BAE上部署web应用
查看>>
路徑 z
查看>>
cpu分析简介
查看>>
1.备忘录模式
查看>>
Html学习笔记3
查看>>
phpexcel导出超过26列解决方案
查看>>
【SSH网上商城项目实战04】EasyUI菜单的实现
查看>>
阿里云云服务器硬盘分区及挂载
查看>>
数据库:django ORM如何处理N+1查询
查看>>
python 基础干货 02
查看>>
[React Router v4] Redirect to Another Page
查看>>
void 0 或者 undefined
查看>>
OCIEnvCreate 失败,返回代码为 -1的解决方法
查看>>
Spark Tachyon的命令行使用
查看>>
LeanCloud SDK 中秒杀70%问题的调试方法
查看>>