Tri*_*ity 5 java algorithm data-structures
我正在学习leetcode进行面试。关于查找数组中未配对的缺失编号存在一个问题。我通过使用HashSet解决了它。但是我看到了以下比我更有效的解决方案。我的问题是,逻辑异或的a ^= nums[i]含义是什么?
int a = 0;
for (int i = 0; i < nums.length; i++) {
a ^= nums[i];
}
return a;
Run Code Online (Sandbox Code Playgroud)
现在,^=您对XOR-and-becomes运算符的所有答案都很熟悉。
由于x ^ x == 0和x ^ 0 == x,执行累积XOR运算将删除两次出现的重复项,并且结果将是唯一的一次出现。
3 ^ 5 ^ 3 ^ 7 ^ 5 = (3 ^ 3) ^ (5 ^ 5) ^ 7 = 0 ^ 0 ^ 7 = 7
3 6 5 2 7 <--- stepwise accumulated: 3=1+2, 5=1+4, 7=1+2+4
Run Code Online (Sandbox Code Playgroud)
XOR是一种有趣的交换和关联函数,“位不同”,因为它不会丢失信息,
z = x ^ y => y = z ^ x
Run Code Online (Sandbox Code Playgroud)
^按位异或或
它会遍历数组的所有元素,并对所有元素执行XOR操作,这是Java中复合赋值的一种形式。
a ^= nums[i]
Run Code Online (Sandbox Code Playgroud)
相当于
a = a ^ nums[i]
Run Code Online (Sandbox Code Playgroud)
^按位异或
(从这里)
从而:
x ^= y;
Run Code Online (Sandbox Code Playgroud)
仅仅是以下内容的“捷径”:
x = x ^ y;
Run Code Online (Sandbox Code Playgroud)