算法刷题Day5: BM52 数组中只出现一次的两个数字
描述:
一个整型数组里除了两个数字只出现一次,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
要求:空间复杂度 O(1),时间复杂度O(n)。
题目传送门 is here
思路:
方法一:最简单的思路就是使用字典记录每个数的出现次数,最后再遍历一遍字典出现次数为1的数。(空间复杂度 O(n),时间复杂度O(n)。空间复杂度不满足题目条件。)
:)小妙招:使用字典的mydict[key] = mydict.get(key, 0)
函数可以轻松将字典不存在的值设置为初始值0。
方法二:还是要用一个字典记录,但是如果出现第二次就remove掉,因此最后字典就只剩下出现一次的数值。(空间复杂度 O(n),时间复杂度O(n)。空间复杂度不满足题目条件。)
基础知识: 使用mydict.get(key)
获取key值,无就会返回None
。
方法三:利用 异或 和 与 运算。
假设只出现一次的数为a
,b
。 大体思路分为三个步骤:
步骤一:
整个数组的数都异或一遍,最终的值为c = a^b
。
步骤二:
打住!先花30秒思考如何利用c来得出a和b?
…1s…
…2s…
…3s…
.
.
…30s… okk 想到了吗?反正我没想到。[尬住哈]
答案:还记得异或特点是不同为1吗,a, b 两个不同的数异或出来,肯定会有至少某一位数是1。对吧。
上栗子! 100 ^ 110 = 010 中间那位不一样
001 ^ 100 = 101 头尾两位不一样
。 所以我们可以利用c
中为1
的那一位,用来区分出 a
和 b
。
具体做法就是,找为1
的那一位,将整个数组分成两组数,一组含a
和重复数, 另一组含b
和重复数。 至此橘事已定。
步骤三:
最后梅开二度,再来一遍异或。分别对这两组数进行异或运算,最终得出一组异或值为a
, 另一组的异或值为b
。
回忆那死去的数学:
异或特点就是:两个相同的数异或结果为0,a ^ a = 0
,相互抵消掉了。一个数异或0结果不变。 b ^ 0 = b
因此1 ^ 1 ^ 4 = 4
与操作特点:相同为1,不同为0,可以区分某个位上是0
还是1
。举个栗子:使用001
分别与上000, 001, 010, 011
可以将一组数区分成000、010
和 001,011
两组数,这两组数的特点是最后一位不相同。
代码:
#from typing import List
class Solution:# 方法一: count每个数的次数def FindNumsAppearOnce1(self , nums: List[int]) -> List[int]:# write code herecnt = {}for item in nums:cnt[item] = cnt.get(item, 0) + 1print(cnt)result = []for k ,v in cnt.items():if v == 1:result.append(k)return sorted(result)# 方法二:出现过就removedef FindNumsAppearOnce2(self , nums: List[int]) -> List[int]:# write code herecnt = {}for item in nums:if cnt.get(item) == None:cnt[item] = 1else:del cnt[item]result = []for k,_ in cnt.items():result.append(k)return sorted(result)# 方法三:使用异或def FindNumsAppearOnce(self , nums: List[int]) -> List[int]:# 步骤一:全部异或一遍tmp = nums[0]for i in range(1,len(nums)):tmp = tmp ^ nums[i]print(tmp)# 步骤二:得出只有两个数得异或之后,从低位开始选择,第一个为1的那位,可以对这两个数进行分组group_num = 1while group_num & tmp == 0:group_num = group_num << 1print(bin(group_num))# 步骤三:进行分组group1 ,group2 = 0,0list1 ,list2 = [],[] # 这两个list只是拿来看看分组情况,最后[1,4,1,6] 会分成 [1,4,1] [6]for item in nums:if item & group_num == 0:list1.append(item)group1 = group1^item # 对组1的数进行异或else:list2.append(item)group2 = group2^item # 对组2的数进行异或print("group: ",list1, list2)if group1 > group2:return [group2, group1]else:return [group1, group2]#so = Solution()
#exp1 = [1,4,1,6]
#print(so.FindNumsAppearOnce(exp1))
昨天做的题,今天写个博客梳理一下。方法三里面考到的数学知识已经忘了,复习起来花了不少时间。本来用方法一和方法二就能通过了,觉得方法三没必要了。但是仔细一看空间复杂度,居然是O(1) ,那方法一、二的空间复杂度是O(n),老不达标了。 牛客网放我过了,但是比赛或者面试的oj就没有那么仁慈了。因此还是要重视起时间复杂度和空间复杂度。有一位比赛大佬和我说,有时候呢,可以从这个时间复杂度还有数组的规模来判断用的是什么解法。比如时间复杂度为1s,数组长度>10^9次方。那肯定只能遍历一遍数组了,于是乎两层for循环那肯定过不了的。
相关文章:
算法刷题Day5: BM52 数组中只出现一次的两个数字
描述: 一个整型数组里除了两个数字只出现一次,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。 要求:空间复杂度 O(1),时间复杂度O(n)。 题目传送门 is here 思路: 方法一:最简单的思路就…...
55 基于单片机的方波频率可调
目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 采用STC89C52单片机最小系统,设计DAC0832、放大器、与示波器显示方波,四位数码管显示频率,两个按键可调。 二、硬件资源 基于KEIL5编写C代码,PROT…...
23.useUnload
在 Web 应用开发中,处理页面卸载(unload)事件是一个重要但常常被忽视的方面。无论是提醒用户保存未保存的更改,还是执行一些清理操作,都需要在用户即将离开页面时进行处理。useUnload 钩子提供了一种简洁的方式来在 React 组件中处理 beforeunload 事件,使得在用户试图关…...
linux环境搭建
1、**连接外网** ssh在192.168.4.x上运行sudo ip link set ens160 down ssh切换到192.168.3.x(外网ip),运行sudo ip route add default via 192.168.2.1 dev ens192 onlink //连接外网 使用完外网后 ssh在192.168.3.x上运行sudo ip link set ens160 up ssh在1…...
《C++与生物医学的智能融合:医疗变革新引擎》
在当今科技飞速发展的时代,人工智能正以前所未有的深度和广度渗透到各个领域,为传统行业带来革新与突破。其中,将 C与生物学、医学等领域知识相结合,开发用于处理生物医学数据、辅助疾病诊断和治疗的人工智能应用,成为…...
Matlab 绘制雷达图像完全案例和官方教程(亲测)
首先上官方教程链接 polarplothttps://ww2.mathworks.cn/help/matlab/ref/polarplot.html 上实例 % 定义角度向量和径向向量 theta linspace(0, 2*pi, 5); r1 [1, 2, 1.5, 2.5, 1]; r2 [2, 1, 2.5, 1.5, 2];% 绘制两个雷达图 polarplot(theta, r1, r-, LineWidth, 2); hold …...
Lua的环境与热更
一、global_State,lua_State与G表 Lua支持多线程环境,使用 lua_State 结构来表示一个独立的 Lua 线程(或协程)。每个线程都需要一个独立的全局环境。而lua_State 中的l_G指针,指向一个global_State结构,这个就是我们常…...
HTML CSS JS基础考试题与答案
一、选择题(2分/题) 1.下面标签中,用来显示段落的标签是( d )。 A、<h1> B、<br /> C、<img /> D、<p> 2. 网页中的图片文件位于html文件的下一级文件夹img中,…...
若依解析(一)登录认证流程
JWTSpringSecurity 6.X 实现登录 JWT token只包含uuid ,token 解析uuid,然后某个常量加UUID 从Redis缓存查询用户信息 流程图如下 感谢若依,感谢开源,能有这么好系统供我学习。 设计数据库,部门表,用户表,…...
Redis设计与实现第17章 -- 集群 总结1(节点 槽指派)
集群通过分片sharding来进行数据共享,并提供复制和故障转移功能。 17.1 节点 一个Redis集群通常由多个节点node组成,刚开始每个节点都是相互独立的,必须将各个独立的节点连接起来,才能构成一个包含多个节点的集群。通过CLUSTER …...
汽车控制软件下载移动管家手机控车一键启动app
移动管家手机控制汽车系统是一款实现车辆远程智能控制的应用程序。通过下载并安装特定的APP,用户可以轻松实现以下功能:远程启动与熄火:无论身处何地,只要有网络,即可远程启动或熄火车辆,提前预冷或预…...
推荐几个可以免费下载网站模板的资源站
推荐几个可以免费下载网站模板的资源站,上面有免费的wordpress模板和帝国CMS模板可以下载。 模板帝 Mobandi.com 模板帝是一个提供丰富网站模板资源的平台,旨在帮助用户快速构建和美化自己的网站。无论是个人博客、企业官网还是电子商务平台ÿ…...
H3C OSPF实验
实验拓扑 实验需求 按照图示配置 IP 地址按照图示分区域配置 OSPF ,实现全网互通为了路由结构稳定,要求路由器使用环回口作为 Router-id,ABR 的环回口宣告进骨干区域 实验解法 一、配置IP地址 [R1]int l0 [R1-LoopBack0]ip add 1.1.1.1 32 […...
Vue框架开发一个简单的购物车(Vue.js)
让我们利用所学知识来开发一个简单的购物车 (记得暴露属性和方法!!!) 首先来看一下最基本的一个html框架 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"&…...
Windows Terminal Solarized Dark 配色方案调整
起因 Widnows 10/11 下面自带的 Terminal 还是比较方便的,因为不需要安装额外的 Terminal 软件。 我喜欢 Solarized Dark 配色方案,虽然有人批评这个配色方案比较老,但我觉得它比较优雅,尤其对外这种眼神比较差的人,比…...
PyTorch张量运算与自动微分
PyTorch张量运算与自动微分 PyTorch由Facebook人工智能研究院于2017年推出,具有强大的GPU加速张量计算功能,并且能够自动进行微分计算,从而可以使用基于梯度的方法对模型参数进行优化,大部分研究人员、公司机构、数据比赛都使用P…...
【从零开始的LeetCode-算法】3264. K 次乘运算后的最终数组 I
给你一个整数数组 nums ,一个整数 k 和一个整数 multiplier 。 你需要对 nums 执行 k 次操作,每次操作中: 找到 nums 中的 最小 值 x ,如果存在多个最小值,选择最 前面 的一个。将 x 替换为 x * multiplier 。 请你…...
【Linux】gdb / cgdb 调试 + 进度条
🌻个人主页:路飞雪吖~ 🌠专栏:Linux 目录 一、Linux调试器-gdb 🌟开始使用 🌠小贴士: 🌟gdb指令 🌠小贴士: ✨watch 监视 ✨打条件断点 二、小程序----进…...
Jenkins Nginx Vue项目自动化部署
目录 一、环境准备 1.1 Jenkins搭建 1.2 NVM和Nodejs安装 1.3 Nginx安装 二、Jenkins配置 2.1 相关插件安装 2.2 全局工具安装 2.3 环境变量配置 2.4 邮箱配置(构建后发送邮件) 2.5 任务配置 三、Nginx配置 3.1 配置路由转发 四、部署项目 …...
视频汇聚平台Liveweb国标GB28181视频平台监控中心设计
在现代安防视频监控领域,Liveweb视频汇聚平台以其卓越的兼容性和灵活的拓展能力,为用户提供了一套全面的解决方案。该平台不仅能够实现视频的远程监控、录像、存储与回放等基础功能,还涵盖了视频转码、视频快照、告警、云台控制、语音对讲以及…...
文件比较和文件流
文件比较和文件流 一、文本比较工具 diff1.基本用法1.1输出格式 2.常用选项 二、文件流1.文件的打开模式2.文件流的分类ifstreamofstreamfstrem区别 3.文件流的函数1. 构造函数2. is_open 用于判断文件是否打开3. open4. getline5. close6. get()7. read8. write9. put10. gcou…...
【2024最新】基于Springboot+Vue的就业信息管理系统Lw+PPT
作者:计算机搬砖家 开发技术:SpringBoot、php、Python、小程序、SSM、Vue、MySQL、JSP、ElementUI等,“文末源码”。 专栏推荐:SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:Java精选实战项…...
PySide6 QSS(Qt Style Sheets) Reference: PySide6 QSS参考指南
Qt官网参考资料: QSS介绍: Styling the Widgets Application - Qt for Pythonhttps://doc.qt.io/qtforpython-6/tutorials/basictutorial/widgetstyling.html#tutorial-widgetstyling QSS 参考手册: Qt Style Sheets Reference | Qt Widge…...
【笔记】成为雍正
观古代历史,不过帝王一家一姓之家史 时间 1662年,田文镜出生。1672年,张廷玉出生。1674年,胤礽出生。1678年,胤禛出生。1679年,年羹尧出生。1680年,鄂尔泰出生。1700年,索额图被赐死…...
Codeforces Round 913 (Div. 3)
题目链接 B. YetnotherrokenKeoard 题意 输入 输出 思路 用两个栈分别维护小写字母下标和大写字母下标,用一个vis数组标记字母是否删除 示例代码 void solve() {string s;cin >> s;int n s.size();vector<bool> vis(n, false);stack<int>sk…...
斐波那契数
C语言实现斐波那契数列的多种方法_斐波那契数列c语言-CSDN博客 题目描述 斐波那契数列为:1,1,2,3,5,8,13.....,常规递推公式f(n)f(n-1)f(n-2); 输入描述 输入一个整数n(0<n<50),为多组数据。 输出描述 输出第n个斐波那契数 样例输入 1 2 4样例输出…...
Redis高阶集群搭建+集群读写
问题 容量不够,redis 如何进行扩容?并发写操作, redis 如何分摊?另外,主从模式,薪火相传模式,主机宕机,导致 ip 地址发生变化,应用程序中配置需要修改对应的主机地址、端…...
Vision Transformer(vit)的主干
图解: 代码: class VisionTransformer(nn.Module):def __init__(self, img_size224, patch_size16, in_c3, num_classes1000,embed_dim768, depth12, num_heads12, mlp_ratio4.0, qkv_biasTrue,qk_scaleNone, representation_sizeNone, distilledFalse,…...
手撸了一个文件传输工具
在日常的开发与运维中,文件传输工具是不可或缺的利器。无论是跨服务器传递配置文件,还是快速从一台机器下载日志文件,一个高效、可靠且简单的文件传输工具能够显著提高工作效率。今天,我想分享我自己手撸一个文件传输工具的全过程…...
Java程序调kubernetes(k8s1.30.7)core API简单示例,并解决403权限验证问题,即何进行进行权限授权以及验证
简单记录问题 一、问题描述 希望通过Java程序使用Kubernetes提供的工具包实现对Kubernetes集群core API的调用,但是在高版本上遇见权限验证问题4xx。 <dependency><groupId>io.kubernetes</groupId><artifactId>client-java</artifact…...
微信开放平台客服电话/seo优化价格
scalatest中的intercept中可以测试某种错误而顺利运行,比如: intercept[AssertionError] {target1.merge(target2)} 就可以检测merge是否有AssertionError,如果有则通过 AssertionError: 表达式 assert(condition) 将在conditi…...
discuz可以做公司网站/公司的网站制作
前言:想必大家在实际编码中都遇到过JDBC的操作, 这里仅做自己的一个总结, 有错误和不完整之处还请大家提出来. 1,JDBC其实一套规范(接口)数据库厂商需要实现此接口(实现类)--数据库驱动 2,jdbc的作用: 可以和数据库创建链接 发送sql语句 接收返回值,处理结果 3,api详解(java.sq…...
学年论文网站建设/百度高级搜索页面的网址
ARM中的预取命令pld的使用 Kernel version:2.6.14 CPU architecture:ARM920T最近在分析ARM Linux的copy_from_user,主要功能由__arch_copy_from_user实现,该函数定义在linux/arch/arm/lib/uaccess.S文件中,使用汇编实现…...
石家庄兼职做网站/推广方案格式模板范文
在学习OSPF的时候会使用到帧中继,那如何将路由器当帧中继网络来使用呢?下面帖上一篇配置和介绍给大家看看。模拟环境拓扑如下图:FR:Building configuration...Current configuration : 1632 bytes!version 12.4service timestamps debug date…...
企业网站模板整套/百度商家入驻怎么做
TextView(xml) autoLink 设置是否当文本为URL链接/email/电话号码/map时,文本显示为可点击的链接。可选值(none/web/email/phone/map/all) autoText 如果设置,将自动执行输入值的拼写纠正。此处无效果,在显示输入法并…...
国外设计网站及介绍/东莞互联网公司排名
1、先查看当前系统Python版本,默认都是Python2.7,命令如下: python -V 2、安装Python3,安装方法很多,本文介绍使用yum,命令如下: yum install python3 3、安装完成后,执行以下命…...