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;
    }
}

参考资料

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-08-20
  • 2021-11-10
  • 2022-02-13
  • 2022-12-23
猜你喜欢
  • 2021-07-12
  • 2021-11-06
  • 2022-12-23
  • 2021-12-02
  • 2021-10-18
  • 2021-06-19
  • 2021-06-10
相关资源
相似解决方案