[LeetCode][Python]136. 只出现一次的数字

Python publisher01 38℃ 0评论

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

说明:

你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?

示例 1:

输入: [2,2,1]
输出: 1
示例 2:

输入: [4,1,2,1,2]
输出: 4

思路:

  1. 还是根据异或运算,任何数与自身异或都是0,任何数与0异或还是自己,所以在列表中依次异或下去,会把重复的数字去掉,剩下的就是那个只出现依次的数
  2. Python的counter模块,可以查出各个元素的出现次数
  3. 如果使用Python的set运算,乘以2减去那个列表
  4. 使用hash table,查找 hash_table 中是否有当前元素的键,如果没有,将当前元素作为键插入 hash_table,最后, hash_table 中仅有一个元素,用 popitem 获得它
#! /usr/bin/env python
#coding=utf-8
class Solution(object):
    def singleNumber(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        __dict = {}
        for e in nums:
            try:
                __dict.pop(e)
            except:
                __dict[e] = 1
        return __dict.popitem()[0]

你或许想:《去原作者写文章的地方

转载请注明:Python量化投资 » [LeetCode][Python]136. 只出现一次的数字

喜欢 (0)or分享 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址