给出2*n + 1 个的数字,除其中一个数字之外其他每个数字均出现两次,找到这个数字。【异或运算】
样例
给出 [1,2,2,1,3,4,3],返回 4
/**
*@param A : an integer array
*return : a integer
*/
public int singleNumber(int[] A) {
// Write your code here
//二进制异或操作,相同的数结果为0.则最后剩下的就是落单的数
if(A.length==0)
return 0;
int single=A[0];
for(int i=1;i<A.length;i++)
single ^= A[i];
return single;
}
}
另外思路:将所有的数转换成二进制,因为是int类型,共32位。申请常数级(32位)的额外空间,然后每个数对应的位相加,最后对应位上的和模2。最后的结果就是单个数对应的二进制数。