java - Java中“^=”运算符的目的是什么?
问题描述
为了面试,我正在学习 leetcode。有一个关于在数组中查找未配对的缺失数字的问题。我通过使用 HashSet 解决了它。但是我看到了下面的解决方案,它比我的更有效。我的问题是逻辑异或的a ^= nums[i]
含义是什么?
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
推荐阅读
- xml - 如果满足模板条件,则显示一次段落 - Xsl 1
- javascript - 过滤带有日期的对象数组
- java - 休息并行调用服务-Java中的多线程
- google-cloud-platform - GCP - TPU 训练因数据增强而变得太慢
- sql - 从数据库表创建结果网格:SQL
- python - Tkinter:检测一个正在运行的进程并在一个进程运行时锁定所有其他按钮?
- javascript - nodejs Worker_thread vs Promise.all 或 allSettled()
- c# - 多对多查询单个数据关系
- webrtc - TURN 服务器:对于给定的网络,总是或从不需要,还是不可预测地需要?
- git - GitHub 可以归类为版本控制系统还是 Git 的 GUI?