找单独的数

127 阅读1分钟

1. 问题描述

在一个班级中,每位同学都拿到了一张卡片,上面有一个整数。有趣的是,除了一个数字之外,所有的数字都恰好出现了两次。现在需要你帮助班长小C快速找到那个拿了独特数字卡片的同学手上的数字是什么。

console.log(solution([1, 1, 2, 2, 3, 3, 4, 5, 5]) === 4)
console.log(solution([0, 1, 0, 1, 2]) === 2)
console.log(solution([7, 3, 3, 7, 10]) ===10)

2. 解题方法

function solution(cards) {
    let result = 0;
    for (let i = 0; i < cards.length; i++) {
        result ^= cards[i];
    }
    return result;
}

3. 解题思路

使用 ^(异或运算符),2个相同的数字异或之后是0,2个不同的数字,用二进制进行异或比较,最后剩下来的数字就是单独的数。 ^ 实际是将2个数的二进制进行比较。

例如 2 ^ 5 = 7
0010
0101
————
0111

例如 7 ^ 7 = 0
0111
0111
————
0000