LeetCode如何找出只出现一次的数字
发表于:2024-11-13 作者:千家信息网编辑
千家信息网最后更新 2024年11月13日,这篇文章主要为大家展示了"LeetCode如何找出只出现一次的数字",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"LeetCode如何找出只出现一次的数字"
千家信息网最后更新 2024年11月13日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安全错误
数据库的锁怎样保障安全
芜湖新悦网络技术
网络技术实习体会
sql数据库设置超时时间
网络安全准入助手
围棋软件数据库
软件开发兴趣爱好及特长
存储服务器租赁平台
数据库表名命名table
赋能网络安全系统
创建数据库的主要步骤
初始数据库名
t3 数据库 安装
江苏有线服务器采购
李沧区软件开发企业
浙江咨询软件开发产品介绍
数字化转型传统数据库问题
外网连接服务器端口
网络安全指的是什么h
浏览器怎么关闭网络安全网络
嘉兴和绍兴服务器哪个大
金河田服务器9007B
云数据库结构是什么
网站数据库接口竞彩足球
提示无法连接到服务器是什么意思
微信找回密码服务器忙
mac 数据库工具
广州集思优网络技术有限公司
网络安全的行业发展前景与趋势
vps服务器租
济宁市公安局网络安全招标