LeetCode如何找出只出现一次的数字
发表于:2024-11-14 作者:千家信息网编辑
千家信息网最后更新 2024年11月14日,这篇文章主要为大家展示了"LeetCode如何找出只出现一次的数字",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"LeetCode如何找出只出现一次的数字"
千家信息网最后更新 2024年11月14日LeetCode如何找出只出现一次的数字思路一 : 集合差值 思路二 : 位运算 当然,对集合进行遍历,通过哈希表记录每个数字出现次数的方法也是可以的,时空复杂度也都是O(N),代码与Day 5思路一一致,此处不再赘述。
这篇文章主要为大家展示了"LeetCode如何找出只出现一次的数字",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"LeetCode如何找出只出现一次的数字"这篇文章吧。
1
题目描述
给定一个非空整数数组,只有一个数字出现一次,其余出现三次,找出只出现一次的数字。如输入[3,4,5,4,3,3],输出5。
2
解题
对集合进行切片,生成三个集合,找到与另外两个集合不同的集合缺少的数字。如集合[2,2,3,2],先对集合进行排序,得到[2,2,2,3],通过切片生成集合[2,3]、[2]、[2],比较集合之间元素差别,得到输出结果3。
class Solution: def singleNumber(self, nums: List[int]) -> int: nums.sort() a=len(set(nums[::2])) b=len(set(nums[1::2])) if a==b: return list(set(nums[::3]) - set(nums[2::3]))[0] else: return list(set(nums[::3]) - set(nums[1::3]))[0]
通过set方法时空复杂度都是O(N),位运算可以使得空间复杂度降为O(1)。在LeetCode刷题DAY 5:只出现一次的数字中使用的"异或"其实就是同一状态出现两次则归零,即0->1->10=0的变化,在本题中则是要让同一状态出现三次归零,即00->01->10->11=00,可见这里需要用两个bit进行状态记录。
这里需要注意的是,要对two、one两位分别计算。对于one,当two=1时,不管输入是什么下一步的one都为0,当two=0时,输入1则one=~one,输入0则one不变。对于two,依赖于one变化后的状态,one新状态为1时,two则为0,one新状态为0时,输入1则two=~two,输入0则不变。因为出现三次就归零,所以one最后保留的是只出现了一次的值。
class Solution: def singleNumber(self, nums: List[int]) -> int: one,two = 0,0 for i in nums: one = one^i & ~two two = two^i & ~one return one
以上是"LeetCode如何找出只出现一次的数字"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
数字
状态
输入
复杂
内容
复杂度
思路
篇文章
两个
方法
时空
变化
学习
帮助
生成
输出
运算
不同
一致
三个
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
东大数据库技术网考
全球网络安全病毒防护领域
j75服务器硬盘
软件开发跟化学有什么关系
继续教育 网络安全法题库
软件开发下载
php服务器一键安装包
ad域服务器搭建
河南嵌入式软件开发多少钱
视综 数据库详细设计说明书
苹果系统数据库
银行服务器招标
软件开发服务定位
地理数据库的类型是
数据库原理期末考试题免费下载
数据库转换函数
幼儿园安全维修保养数据库
键值数据库重要特性
岚森网络技术
数据库自动相加代码
用友固定资产数据库月份表
web读取数据库图片
网络安全人员备案
软件开发模型 敏捷开发
事业单位网络安全常识
app视频聊天服务器配置
数据库sa锁定
vs2012数据库实例
计算机网络技术协议的三要素
市网络安全信息化副主任级别