异或

定义:同为0,异为1
0^0 0
1^0 1
奇数^1 加-1;偶数^1 加1
任何整数^0 不变:abb(可以调换顺序)=a 这个就是交换两个变量不用临时变量的方法之一

给你1-1000个连续自然数,然后从中随机去掉两个,再打乱顺序,要求只遍历一次,求出被去掉的两个数。
不用数学方程的方法,用异或解决。
原理就是因为x和y是两个不同的整数,所以这两个数的异或结果,转化为二进制的话,一定在某位是1,假设在第3位。也就是说如果把原始数组按第3位是否为0进行划分,就可以分成两个数组,每个数组各包含一个被抽取的数。如果打乱后的数组也按这个规则划分为两个数组,这样就得到了4个数组,其中两组是第3位为0,另外两组是第3位为1。把第3位为0的两个数组所有元素进行异或就能得到被抽取的一个数,同理也就能获得另外一个被抽取的数。

你可能感兴趣的:(异或)