原理
相同的数异或为0,不同的异或为1。0和任何数异或等于这个数本身。
性质
交换律
结合律(即(a^b)^c == a^(b^c))
对于任何数x,都有x^x=0,x^0=x
自反性 A XOR B XOR B = A xor 0 = A —> A XOR B = C 则 C XOR B = A
例子
1-1000放在含有1001个元素的数组中,只有唯一的一个元素值重复,其它均只出现
一次。每个数组元素只能访问一次,设计一个算法,将它找出来;不用辅助存储空
间,能否设计一个算法实现?
1 | 解法一:遍历所有和结果减去1-1000即可,但是不是最优解,而且过大可能溢出 |
如果除了一个数字以外,其他数字都出现了两次,那么如何找到出现一次的数字?
1 | 答案很简单:全员进行异或操作即可。考虑异或操作的性质:对于两个操作数的每一位,相同结果为 00, |
扩展
那么这一方法如何扩展到找出两个出现一次的数字呢?
如何扩展到从两个数字相同到存在3个相同数字?
相关题目
序号 | 题目内容 |
---|---|
1 | 剑指 Offer 56 - I. 数组中数字出现的次数 |
2 | 剑指 Offer 56 - II. 数组中数字出现的次数 II |