我正在研究leetcode进行面试。关于查找数组中未配对的缺失编号存在一个问题。我通过使用HashSet解决了它。但是我看到以下解决方案比我的解决方案更有效。我的问题是a ^= nums[i]
的逻辑XOR是什么意思?
int a = 0;
for (int i = 0; i < nums.length; i++) {
a ^= nums[i];
}
return a;
答案 0 :(得分:9)
您现在对所有答案都很熟悉,var teamResults = this.state.teamResults.MRData.RaceTable.Races.Results || [];
return (
<div>
<table>
<thead>
<tr>
<th>Round</th>
<th>Grand prix</th>
<th>{this.state.teamResults.position}</th>
<th>{this.state.teamResults.grid}</th>
<th>Points</th>
</tr>
</thead>
<tbody>
{teamResults.map((race, i) => <TeamResults teamRacesData = {race} key={i}/>)}
</tbody>
</table>
</div>
);
是XOR-and-becomes运算符。
由于 x ^ x == 0和x ^ 0 == x ,执行累加XOR会删除两次出现的重复项,并且结果将是唯一的一次出现。
^=
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
答案 1 :(得分:9)
^按位异或或XOR
它将遍历数组的所有元素并对所有元素执行XOR操作。这是Java中的一种复合赋值形式。
a ^= nums[i]
等效于
a = a ^ nums[i]
答案 2 :(得分:5)
答案 3 :(得分:3)
^
运算符是the bitwise exclusive OR。
当然,a ^= b
等同于a = a ^ b
。
关于“按位异或”的含义,请参见例如Wikipedia:
如果仅第一位为1或仅第二位为1,则每个位置的结果均为1;如果两个均为0或均为1,则结果为0。
答案 4 :(得分:1)
按位 XOR 运算符。
a ^ = nums [i] 是速记符号。
您可以将其写为 a = a ^ nums [i]
int a = 0;
for (int i = 0; i < nums.length; i++) {
a = a ^ nums[i];
}
return a;
答案 5 :(得分:1)
A | B | A XOR B
--+---+--------
0 | 0 | 0
0 | 1 | 1
1 | 0 | 1
1 | 1 | 0
在Java中,复合赋值是应用算术(或按位运算)并将值分配给左侧变量的一种较短方法。所以:
a ^= nums[i];
等效于:
a = a ^ nums[i];
我们利用两个相等的XOR相互抵消这一事实,并通过迭代数组的元素并将它们彼此进行XOR(初始值为0)来解决问题。