异或的妙用
注:参考自《王道程序员求职宝典》。
1. 异或
按位异或(^
)的运算规则为当两位相同时,则为0,不同时则为1。
异或满足交换律:A^B^C^D^E^F^B=A^C^D^E^F
。
2.妙用方法
2.1 寻找数成对出现时缺失的某一个数
-
如有一组数A、B、C、D、A、C、B,则
A^B^C^D^A^C^B=D
。 -
给你一个由n-1个整数组成的未排序的序列,其元素都是1到n中的不同的整数,请写出一个寻找序列中缺失整数的线性时间算法:
解法一:先求n-1个数之和Sum,然后计算n(n+1)/2 -sum可得,此种解法当n很大时,加法运算有可能溢出。
解法二:先求从1到n共n个数的异或结果A,然后将该序列按照次序一次与A求异或,最后得到的数就是丢失的整数。
2.2 不使用第三方变量,交换两个变量的值
a=a^b;
b=a^b