异或相关知识

基本性质

0^0 = 1^1 = 0

0^1 = 1^0 = 1

x^0 = x 且 x^x = 0
交换律:x^y = y^x
结合律:(xy)z = x(yz)
自反性:xyy = x

[交换两个数]

int swap(int &a,int &b)
{
    a = a^b;
    b = a^b;
    a = a^b;
}

[A集合里拿掉数x得到B集合,求x]

XOR(X)表示将X集合内所有的数做异或

XOR(B)^XOR(A) = XOR(B)XOR(B)x = 0^x = x

[集合A里只有数x出现1次,其余数全都重复出现2次,求x]

xor(A) = xyyz^z = x(yyz^z) = x^0 = x

[集合A[1n]里只有数x(1n之间)出现2次,其余数1次,求x]

相当于x出现了3次,xxx = x,

其他数出现了两次,x^x = 0

public int FindDuplicate(int[] nums) {
 int res = 0;
 for(int i = 0; i < nums.Length; i++){
     res ^= nums[i];
     res ^= i;
 }
 return res;
}

原文地址:https://www.cnblogs.com/xiaoxiao179/p/13622682.html