算法中的异或
异或在运算中表示为:同位相同为0,不同为1。
并且最重要的点在于,异或满足交换律和结合律。
例题
力扣-136
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
输入: [2,2,1]
输出: 1
解答
public int singleNumber(int[] nums) {
int z = 0;
for ( int x : nums ) {
z ^= x;
}
return z;
}
理解:
0异或任何数都为其本身,任何两个相同的数以后后都为0,通过结合律和交换律可以将所有成对的值消除,最终保证只有一个唯一值出现。