260. Single Number III
来源:互联网 发布:村上作品推荐 知乎 编辑:程序博客网 时间:2024/06/04 19:54
主要思想:
利用异或的交换律筛选
首先,数组是偶数个(有两个数互不相同,其它数都正好有两个)
考虑 nums = [a1, a2, ... , an]
则其中有两个数x, y互不相同且出现一次, 其它数a,a, b,b, c,c...各出现两次
那么因为x与y互不相同,x与y必定在某个位上的数字不同(x的是0而y的是1 或者 x的是1而y的是0。比如x是(1110)而y是(1010), 那么从左往右第二位x与y不同).
我们要
将数组逐个异或(a1^a2^a3...^an),根据异或的交换律, 得到的结果为(a^a^b^b^c^c^...^x^y) = (0^0^0^...^x^y) = (x^y)
其中一定有一个位为1,那么说明这个位上x与y的值不同.
然后通过检测nums每个数在这个位上为0还是1, 把nums分为两组,
第一组的每个数字在这个位上为0, 另一组的每个数字在这个位上为1。
这样,我们就把x与y分到了两组, 而每一组都有奇数个, 都由出现两次的数与(x或y)组成。
最后通过
分别将每一组都逐个异或, 同样根据异或的交换律, 相同的数异或得0, 最后这两组的计算结果是x与y,
这样我们就找到了x与y。返回即可。
阅读全文
0 0
- 260.Single Number III
- 260. Single Number III
- 260. Single Number III
- 260. Single Number III
- 260. Single Number III
- 260. Single Number III
- 260. Single Number III
- 260. Single Number III
- 260. Single Number III
- 260. Single Number III
- 260. Single Number III
- 260. Single Number III
- 260. Single Number III
- 260. Single Number III
- 260. Single Number III
- 260. Single Number III
- 260. Single Number III
- 260. Single Number III
- 【JZOJ5347】遥远的金字塔
- 使用JAVA读写Properties属性文件
- WCF透明代理类,动态调用,支持async/await
- java实现多线程的方法
- Centos6与Centos7防火墙设置与端口开放的方法
- 260. Single Number III
- 【JZOJ 5260】 区间第k小
- .NET Framework 的容器
- 华为硬件通用类笔试总结
- Python连接数据库
- InnoDB存储引擎
- 数据结构之图篇
- LabVIEW 读取 DLL 函数
- 线程的生命周期