原题:给出2*n+1个的数字,除其中一个数字以外其他的数字均出现两次,找出这个数字
样例:给出[1,2,2,1,3,4,3],返回4
思路:
1.首先判断传入的的数组是否为空,
2.用循环历遍数组
3.用异或运算赋值
(1).异或运算是指两个数的二进制形式,按位对比,相同取0,不同取1
(2)异或运算的性质
交换律:a^b=b^a
结合律:a^b^c=a^(b^c)=(a^b)^c
自反性:a^b^a=b
(3).0与任何整数进行异或运算,结果都为这个数本身(所以设num的初值为0)
(4).任何整数与自身做异或运算结果都为0
4.设数组中,出现次数非两次的数为x,将数组中的所有数做异或运算,利用交换律与结合律,并且数组中除了x其余数均出现两次,即:a^b^c^...^d^x^...^a^c可以转换为(a^a)^(b^b)^(c^c)...^x,最后的运算结果为就是要找的落单的数
解法:
public class Solution{
public int singleNum(int [] A){
if (A==null || A.length==0)
return 0;
int num=0;
for(int i : A)
num^=i;
return num;
}
}