java - Java 中 "^= "运算符的用途是什么?

标签 java algorithm data-structures

我正在学习 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/

相关文章:

java - 尝试在 Java 中重新分配和输出新的设定值

java - 如何处理java.lang.AbstractMethodError : com. mysql.jdbc.JDBC4CallableStatement.closeOnCompletion()

c++ - 我想优化这个短循环

algorithm - 用有向图实现最短路径算法的最佳方法

java - java中是否有任何函数的行为类似于c中的getopt

java - 该字符串需要多少份?

algorithm - 如何检测有向图是否唯一连通?

代码未编译

algorithm - 修改福特富尔克森算法的bfs,寻找增广路径

C 列表的列表