我正在学习 leetcode 面试。有一个关于在数组中查找未配对的缺失数字的问题。我通过使用 HashSet 解决了它。但是我看到下面的解决方案比我的更有效。我的问题是 a ^= nums[i]
的逻辑 XOR 是什么意思?
int a = 0;
for (int i = 0; i < nums.length; i++) {
a ^= nums[i];
}
return a;
最佳答案
您现在对 ^=
是 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
XOR 是一个有趣的交换和关联函数“位不同”,因为它不会丢失信息,
z = x ^ y => y = z ^ x
关于java - Java 中 "^= "运算符的用途是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58433065/