这题是简单难度,原文

用一个map记录出现过的数字,再次出现就删除,最后只会剩下一个。

var singleNumber = function(nums) {
    const has = {};
    for (let i = 0; i < nums.length; i++) {
        let num = nums[i];
        if (has[num] === undefined) {
            has[num] = num;
        } else {
            delete has[num];
        }
    }
    return Object.values(has)[0];
};

评论中的方法很好

  1. 交换律:a ^ b ^ c <=> a ^ c ^ b
  2. 任何数于0异或为任何数 0 ^ n => n
  3. 相同的数异或为0: n ^ n => 0
var a = [2,3,2,4,4]
// 2 ^ 3 ^ 2 ^ 4 ^ 4等价于 2 ^ 2 ^ 4 ^ 4 ^ 3 => 0 ^ 0 ^3 => 3

不需要额外空间的方法,就往位运算上想

上一篇 下一篇