我最近在做一些编码挑战,这是其中一个问题.
给出了由N个整数组成的非空零索引数组A. 该数组包含奇数个元素,并且该数组的每个元素可以与具有相同值的另一个元素配对,除了一个未配对的元素.找到不成对的价值.例如,给定数组A:A [0] = 9 A [1] = 3 A [2] = 9 A [3] = 3 A [4] = 9 A [5] = 7 A [6] = 9功能应该返回7.
完成自己的工作后,我遇到了这个解决方案.
public int solution(int[] A) {
int r = 0;
for(int i=0;i<A.length;i++)
r ^=A[i];
return r;
}
Run Code Online (Sandbox Code Playgroud)
我对这段代码感到惊讶.我以前从未见过独有的OR赋值运算符,并且想知道这个解决方案是如何工作的.如果有人能够引导我完成这个简单的代码并解释它是如何工作的那将是美妙的.
简而言之,A ^ B ^ B会给你回复A.两个^Bs不需要是连续的:只要你有两次XORed相同的值,就可以清除效果.在您的问题中,由于值是成对的,因此通常相同的值将被异或两次,这对最终值没有影响,除了未配对的值.所以最终的结果就是0 ^ thatUnPairedValue,简单来说就是这样thatUnPairedValue.