82. 落单的数
给出2*n + 1 个的数字,除其中一个数字之外其他每个数字均出现两次,找到这个数字。
样例
给出 [1,2,2,1,3,4,3],返回 4
挑战
一次遍历,常数级的额外空间复杂度
解答
代码
public int singleNumber(int[] A) {
// write your code here
if(A.length==0){
return 0;
}
int ans=A[0];
for(int i=1;i<A.length;i++){
ans^=A[i];
}
return ans;
}
思路
主要是用到了异或运算的知识.
异或:二进制中,相同为0,不同为1.
也就是说,1^5^2^4^1^2^4=5
简单理解就是异或之中,有两个相同的数那就可以消去了
解析
首先要想到异或的特性.然后就是特殊情况了!