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

你可能感兴趣的:(0.0.1 二分法 异或运算)