我正在解决这个问题。 "给定一个数组,找到出现奇数次数的int。 总会有一个整数出现奇数次。" 我在网上提出了这个解决方案:
function findOdd(A) {
var n = 0;
for(var i = 0; i < A.length; i++){
n = n^A[i];
}
return n;
}
这有效,但我不知道为什么,我希望有人可以向我解释。我只是不理解这句话:
n = n^A[i];
你可以告诉我在这种情况下它在做什么吗?
答案 0 :(得分:2)
对任何数字进行Xoring将导致0.如果您知道只有一个数字出现奇数次,其他数字将通过自我xored取消,答案将是出现的剩余数字奇数次。
答案 1 :(得分:1)
按位运算符处理32位数。操作中的任何数字操作数都将转换为32位数。结果将转换回JavaScript编号。 ^
是一个按位XOR javascript运算符。
按位异或运算符在每个位的位置返回一个,其中任一个但不是两个操作数的相应位都是1。
如果a和b不同,则XOR b产生1。 XOR操作的真值表是:
a b a XOR b
0 0 0
0 1 1
1 0 1
1 1 0
表达式n = n^A[i];
让A = [1,2,3,4,5]
for n=0, i=0
=&gt; 0 ^ A[0]
=&gt; 0 ^ 1
=&gt;转换为二进制0000 ^ 0001
结果为0001
,等于1
for n=1, i=1
=&gt; 1 ^ A[1]
=&gt; 1 ^ 1
=&gt;转换为二进制1111 ^ 0010
结果为1101
,等于13
依此类推......希望这个解决方案可以帮助您理解上述表达并清除您的所有疑虑。
答案 2 :(得分:0)
^是一个exor位智能运算符。所以当你这样做时
1 ^ 1是0
0 ^ 1是1
所以要找到以下代码所用的奇数1 最初的结果是arr [0]为1。 所以在arrary 0 ^ 0变为0而2 ^ 2变为0并且有3 1&#39; s所以1 ^ 1变为0并且0 ^ 1我们被遗漏了重复奇数nubmer次数
var arr=[1,1,1,0,0,2,2];
var result=arr[0];
for(var i=1;i<arr.length;i++)
result=result ^ arr[i];
console.log(result);
&#13;
希望有所帮助
答案 3 :(得分:0)
两个相同数字的XOR始终为零。也就是说,
imageViews.forEach { $0.isUserInteractionEnabled = true }
因此,如果您对某个特定数字反复偶数次偶数,则结果将为零。
这里,最初n的值为零。即使次数被异或的次数也将为零。并且出现奇数次数的数字,比如说A^A=0
次,对于2m次出现将导致零,并且对于最后一次出现将导致相同的数字。
这就是解决方案的工作原理。