• Python编程题22--只出现一次的数字


    题目

    给定一个非空整数列表,除了某个元素只出现一次以外,其余每个元素均出现两次。请找出那个只出现了一次的元素。

    注意:除了定义的返回结果变量外,不允许使用额外空间,并且不允许使用编程语言的内置函数。

    例如:

    给定一个列表:[4, 1, 2, 1, 2],返回结果:4

    给定一个列表:[2, 2, 1],返回结果:1

    实现思路

    • 通过 位运算 来实现,设置一个返回值res,默认值为0
    • 遍历列表元素,每次均与res进行异或运算
    • 列表中只有1个元素出现一次,其余元素均出现两次,相同元素异或的结果为0,所以最终的结果res就是这个只出现一次的元素

    在二进制的异或运算中,例如a=12,b=7,那么a异或b的结果c计算如下:

    a = 0 0 0 0 1 1 0 0
    b = 0 0 0 0 0 1 1 1
    c = 0 0 0 0 1 0 1 1 (相同位的值为0,不同为1)

    所以我们可以看出:0异或任一个数a,其结果为 a;任一数a异或自己,也就是 a异或a,其结果为 0

    代码实现

    def singleNumber(nums):
        res = 0
        for num in nums: 
            res = res ^ num
        return res
    
    作者:wintest
    本文版权归作者和博客园共有,欢迎转载,但必须在文章页面明显位置给出原文链接,并保留此段声明,否则保留追究法律责任的权利。
  • 相关阅读:
    【leetcode】974. Subarray Sums Divisible by K
    【leetcode】976. Largest Perimeter Triangle
    【leetcode】973. K Closest Points to Origin
    listen 70
    科学60秒 (一) :上
    listen 69
    listen 68 Theoretical Physicist Stephen Hawking Dies at 76
    中译英33
    listen 67
    中译英32
  • 原文地址:https://www.cnblogs.com/wintest/p/15473373.html
Copyright © 2020-2023  润新知