前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode刷题DAY 5:只出现一次的数字

LeetCode刷题DAY 5:只出现一次的数字

作者头像
三猫
发布2020-05-09 10:43:49
3410
发布2020-05-09 10:43:49
举报
文章被收录于专栏:机器学习养成记

继续使用前两天用到的哈希表,还从解题方法中发现了异或运算的使用方法。

1

题目描述

给定一个非空整数数组,只有一个数字出现一次,其余出现两次,找出只出现一次的数字。如输入[3,4,5,4,3],输出5。

2

知识点

思路一:建立哈希表记录每个值出现的次数

前两天刷题都是建立哈希表,思维惯性第一反应又是这个。遍历每个值,建立字典记录出现次数,返回出现次数为1的值即可。

代码语言:javascript
复制
class Solution:
    def singleNumber(self, nums: List[int]) -> int:
        countnum=dict()
        for i in nums:
            if i in countnum:
                countnum[i]=countnum[i]+1
            else:
                countnum[i]=1
        for e,v in countnum.items():
            if v == 1:
                return e

思路二:集合差值

python中set表示无序不重复集合,对集合可直接求差值,得到两个集合中不同的值。

代码语言:javascript
复制
class Solution:
    def singleNumber(self, nums: List[int]) -> int:
        nums.sort() 
        return list(set(nums[::2]) - set(nums[1::2]))[0]

思路三:异或运算(位运算)

看其他人解题思路看到的方法。异或运算规则是:如果a、b两个值不相同,则结果为1;如果a、b两个值相同,结果为0。计算机中用二进制进行存储,所以[3,5,3]通过异或有如下结果:3是011,5是101,两者异或结果为110,再与3进行异或则为011^110=101,即所要的结果5。

代码语言:javascript
复制
class Solution:
    def singleNumber(self, nums: List[int]) -> int:
        res = 0
        for i in nums:
            res ^= i
        return res
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器学习养成记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档