您的位置:首页 > 编程语言 > Python开发

python [LeetCode] 只出现一次的数字

2019-03-08 15:57 369 查看

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

说明

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

示例 1:

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

示例2:

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

思路
这个方法需要额外的空间。先生成一个空字典,然后遍历数组中的每个元素,如果元素不在字典中,则添加该元素,并使value值为1;若在字典中,则将value值改为2。最后遍历字典,找到value为1的元素,并返回键值。
16个用例,耗时56ms,击败14%python提交记录。

class Solution(object):
def singleNumber(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
dic = {}
for number in nums:
if number not in dic:
dic[number] = 1
else:
dic[number] = 2
for key,value in dic.items():
if value == 1:
return key

思路二
(参考大佬的)
不使用额外空间。用到了异或操作 ^ 。任何数与0异或结果为本身,任何数和本身异或,结果为0。异或满足加法结合律和交换律。
16个用例,耗时48ms,击败17%python提交记录

class Solution(object):
def singleNumber(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
res = 0
for number in nums:
res = res^number
return res
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: