码不停题: 只出现一次的数字

134 阅读1分钟

题目链接简述: 找出nums列表中单独出现的数字

python:

    def singleNumber(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        return reduce(lambda x, y: x^y, nums)

image.png

解析:

  1. 异或

    小明要么在北京, 要么在上海, 那么异或就是, 不允许小明同时在北京和上海, 或者同时不在北京或上海, 此时异或为0(假). 如果在北京, 为1(真), 如果在上海, 为1(真).

    性质:

    参考知乎

    解题用到的性质是: x^x = 0, x^0=x. 也就是说, 将所有元素进行异或运算, 写成一个x1 ^ x2 ^ x3 ... ^ xn的表达式, 相同的元素异或得到0, 而剩下的单个元素异或0得到它本身, 也就找出了单独出现的元素.

  2. reduce函数

reduce接收两个参数: (函数, 数据), 它会将数据的前两个传入函数, 再将结果与第三个数据计算, 以此类推直到遍历完整个数据. 因为函数简单, 不需要单独写一个函数, 直接用lambda匿名函数处理即可.