LintCode 82. 落单的数
- LintCode LintCode 82. 落单的数
- 给出 2×n + 1 个的数字,除其中一个数字之外其他每个数字均出现两次,找到这个数字。
样例
- 给出
[1,2,2,1,3,4,3]
,返回4。
异或运算
- 首先异或表示当两个数的二进制表示进行异或运算时,当前位的两个二进制表示不同则为 1 相同则为 0。该方法被广泛推广用来统计一个数的 1 的位数!
- 参与运算的两个值,如果两个相应 bit 位相同,则结果为 0,否则为 1。
即:0^0 = 0, 1^0 = 1, 0^1 = 1, 1^1 = 0。
按位异或的 3 个特点:- (1) 00=0,01=1 0 异或任何数=任何数;
- (2) 10=1,11=0 1 异或任何数=任何数取反;
- (3) 任何数异或自己=把自己置 0;
思路:通过异或,相同的数结果为 0,那么最后的结果一定是落单的数字。
Java 代码
public class Solution {
/**
* @param A: An integer array
* @return: An integer
*/
public int singleNumber(int[] A) {
// write your code here
int ans = 0;
for (int i = 0; i < A.length; i++) {
ans ^= A[i];
}
return ans;
}
}
参考资料