0.0.1 二分法 异或运算

int mid = L + (( R - L ) >> 1)

异或 位运算 等同于 无进位 相加

0^N == N,
N ^ N == 0

无额外空间,交换a, b
b = abb =a
a= ab(abb) = b

a = a ^ b;
b = a ^ b;
a = a ^ b;

一个数组中有一种数出现了奇数次,其他数都出现了偶数次,怎么找到这一个数。

用temp = 0 去异或 所有的数,得到的结果就是这个奇数次的数。

一个数组中有两种数出现了奇数次,其他数都出现了偶数次,怎么找到这一个数。

首先用temp = 0 去异或 所有的数,得到的结果就是这个a^b。
因为a 不等于 b, 所以结果必不为0.
假设第四位上的值为1,那么a与b在第四位上就不同
用temp1去异或所有第四位上不为1的数,得到一个结果a
再用temp2去异或所有第四位上为1 的书,得到另一个结果b

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容