【leetcode】136. 只出现一次的数字

44 阅读1分钟

leetcode-136.png

这题的实现思路还是比较多的,用额外的存储空间来计数,或者用集合来实现等都可以,但是题目给出了限制,不能用额外的存储空间,以及在线性的时间内解决。
这里就要用到位运算异或来解决。

异或操作:利用异或运算的性质:

  • x ^ x = 0(任何数和自身异或为0)
  • x ^ 0 = x(任何数和0异或为自身)
  • 异或是可交换和可结合的。

因此,异或所有元素,最终会得到只出现一次的元素,因为成对的数字会相互抵消。

var singleNumber = function (nums) {
    let res = 0
    for (let num of nums) {
        res ^= num
    }
    return res
};