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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章