LintCode刷题:82· 落单的数I

描述:

  给出 2 * n + 1个数字,除其中一个数字之外其他每个数字均出现两次,找到这个数字。

样例:

  输入:A = [1,1,2,2,3,4,4]

  输出:3

思路:

  利用异或位运算的性质:任何数与自身异或的结果为0,0异或任何数等于任何数

  我们只需遍历数组中的每一个元素,并将其进行异或。因为,异或满足交换律和结合律,所以最终的异或结果将仅仅包含只出现一次的那个数。

代码:

/**
 * @author Fahaxiki
 * @date 2021-05-25
 */
public class Solution {
    public static int singleNumber(int[] A) {
        if(A == null || A.length == 0) {
            return -1;
        }
        int result = 0;
        for (int value : A) {
            // ^= 按位异或运算符
            result ^= value;
        }
        return result;
    }
}

posted on 2021-05-26 15:14  法哈席基  阅读(74)  评论(0编辑  收藏  举报