当前位置: 首页 > news >正文

算法刷题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

方法三:利用 异或 和 与 运算。

假设只出现一次的数为ab。 大体思路分为三个步骤
步骤一
整个数组的数都异或一遍,最终的值为c = a^b
步骤二
打住!先花30秒思考如何利用c来得出a和b?
…1s…
…2s…
…3s…
.
.
…30s… okk 想到了吗?反正我没想到。[尬住哈]

答案:还记得异或特点是不同为1吗,a, b 两个不同的数异或出来,肯定会有至少某一位数是1。对吧。
上栗子! 100 ^ 110 = 010 中间那位不一样 001 ^ 100 = 101 头尾两位不一样。 所以我们可以利用c 中为1的那一位,用来区分出 ab
具体做法就是,找为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、010001,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 数组中只出现一次的两个数字

描述&#xff1a; 一个整型数组里除了两个数字只出现一次&#xff0c;其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。 要求&#xff1a;空间复杂度 O(1)&#xff0c;时间复杂度O(n)。 题目传送门 is here 思路&#xff1a; 方法一&#xff1a;最简单的思路就…...

55 基于单片机的方波频率可调

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 采用STC89C52单片机最小系统&#xff0c;设计DAC0832、放大器、与示波器显示方波&#xff0c;四位数码管显示频率&#xff0c;两个按键可调。 二、硬件资源 基于KEIL5编写C代码&#xff0c;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)&#xff0c;运行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++与生物医学的智能融合:医疗变革新引擎》

在当今科技飞速发展的时代&#xff0c;人工智能正以前所未有的深度和广度渗透到各个领域&#xff0c;为传统行业带来革新与突破。其中&#xff0c;将 C与生物学、医学等领域知识相结合&#xff0c;开发用于处理生物医学数据、辅助疾病诊断和治疗的人工智能应用&#xff0c;成为…...

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支持多线程环境&#xff0c;使用 lua_State 结构来表示一个独立的 Lua 线程&#xff08;或协程&#xff09;。每个线程都需要一个独立的全局环境。而lua_State 中的l_G指针&#xff0c;指向一个global_State结构&#xff0c;这个就是我们常…...

HTML CSS JS基础考试题与答案

一、选择题&#xff08;2分/题&#xff09; 1&#xff0e;下面标签中&#xff0c;用来显示段落的标签是&#xff08; d &#xff09;。 A、<h1> B、<br /> C、<img /> D、<p> 2. 网页中的图片文件位于html文件的下一级文件夹img中&#xff0c;…...

若依解析(一)登录认证流程

JWTSpringSecurity 6.X 实现登录 JWT token只包含uuid ,token 解析uuid&#xff0c;然后某个常量加UUID 从Redis缓存查询用户信息 流程图如下 感谢若依&#xff0c;感谢开源&#xff0c;能有这么好系统供我学习。 设计数据库&#xff0c;部门表&#xff0c;用户表&#xff0c…...

Redis设计与实现第17章 -- 集群 总结1(节点 槽指派)

集群通过分片sharding来进行数据共享&#xff0c;并提供复制和故障转移功能。 17.1 节点 一个Redis集群通常由多个节点node组成&#xff0c;刚开始每个节点都是相互独立的&#xff0c;必须将各个独立的节点连接起来&#xff0c;才能构成一个包含多个节点的集群。通过CLUSTER …...

汽车控制软件下载移动管家手机控车一键启动app

移动管家手机控制汽车系统是一款实现车辆远程智能控制的应用程序‌。通过下载并安装特定的APP&#xff0c;用户可以轻松实现以下功能&#xff1a;‌远程启动与熄火‌&#xff1a;无论身处何地&#xff0c;只要有网络&#xff0c;即可远程启动或熄火车辆&#xff0c;提前预冷或预…...

推荐几个可以免费下载网站模板的资源站

推荐几个可以免费下载网站模板的资源站&#xff0c;上面有免费的wordpress模板和帝国CMS模板可以下载。 模板帝 Mobandi.com 模板帝是一个提供丰富网站模板资源的平台&#xff0c;旨在帮助用户快速构建和美化自己的网站。无论是个人博客、企业官网还是电子商务平台&#xff…...

H3C OSPF实验

实验拓扑 实验需求 按照图示配置 IP 地址按照图示分区域配置 OSPF &#xff0c;实现全网互通为了路由结构稳定&#xff0c;要求路由器使用环回口作为 Router-id&#xff0c;ABR 的环回口宣告进骨干区域 实验解法 一、配置IP地址 [R1]int l0 [R1-LoopBack0]ip add 1.1.1.1 32 […...

Vue框架开发一个简单的购物车(Vue.js)

让我们利用所学知识来开发一个简单的购物车 &#xff08;记得暴露属性和方法&#xff01;&#xff01;&#xff01;&#xff09; 首先来看一下最基本的一个html框架 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"&…...

Windows Terminal Solarized Dark 配色方案调整

起因 Widnows 10/11 下面自带的 Terminal 还是比较方便的&#xff0c;因为不需要安装额外的 Terminal 软件。 我喜欢 Solarized Dark 配色方案&#xff0c;虽然有人批评这个配色方案比较老&#xff0c;但我觉得它比较优雅&#xff0c;尤其对外这种眼神比较差的人&#xff0c;比…...

PyTorch张量运算与自动微分

PyTorch张量运算与自动微分 PyTorch由Facebook人工智能研究院于2017年推出&#xff0c;具有强大的GPU加速张量计算功能&#xff0c;并且能够自动进行微分计算&#xff0c;从而可以使用基于梯度的方法对模型参数进行优化&#xff0c;大部分研究人员、公司机构、数据比赛都使用P…...

【从零开始的LeetCode-算法】3264. K 次乘运算后的最终数组 I

给你一个整数数组 nums &#xff0c;一个整数 k 和一个整数 multiplier 。 你需要对 nums 执行 k 次操作&#xff0c;每次操作中&#xff1a; 找到 nums 中的 最小 值 x &#xff0c;如果存在多个最小值&#xff0c;选择最 前面 的一个。将 x 替换为 x * multiplier 。 请你…...

【Linux】gdb / cgdb 调试 + 进度条

&#x1f33b;个人主页&#xff1a;路飞雪吖~ &#x1f320;专栏&#xff1a;Linux 目录 一、Linux调试器-gdb &#x1f31f;开始使用 &#x1f320;小贴士&#xff1a; &#x1f31f;gdb指令 &#x1f320;小贴士&#xff1a; ✨watch 监视 ✨打条件断点 二、小程序----进…...

Jenkins Nginx Vue项目自动化部署

目录 一、环境准备 1.1 Jenkins搭建 1.2 NVM和Nodejs安装 1.3 Nginx安装 二、Jenkins配置 2.1 相关插件安装 2.2 全局工具安装 2.3 环境变量配置 2.4 邮箱配置&#xff08;构建后发送邮件&#xff09; 2.5 任务配置 三、Nginx配置 3.1 配置路由转发 四、部署项目 …...

视频汇聚平台Liveweb国标GB28181视频平台监控中心设计

在现代安防视频监控领域&#xff0c;Liveweb视频汇聚平台以其卓越的兼容性和灵活的拓展能力&#xff0c;为用户提供了一套全面的解决方案。该平台不仅能够实现视频的远程监控、录像、存储与回放等基础功能&#xff0c;还涵盖了视频转码、视频快照、告警、云台控制、语音对讲以及…...

9 款 AI 写论文哪个好?2026 深度实测|虎贲等考 AI 凭真文献 + 真实图表 + 全流程实证,稳坐毕业论文首选

毕业季高频提问&#xff1a;9 款 AI 写论文哪个好&#xff1f;市面上工具看似大同小异&#xff0c;实则在文献真实性、实证图表、全流程覆盖、学术合规上差距巨大。通用大模型文献造假、普通工具无实证能力、小众平台功能残缺&#xff0c;选错轻则反复改稿&#xff0c;重则查重…...

集合进阶(Collection)

一、集合概述和分类1.1 集合的分类如下图所示&#xff1a;一类是单列集合元素是一个一个的&#xff0c;另一类是双列集合元素是一对一对的。 主要学习Collection单列集合。Collection是单列集合的根接口&#xff0c;也称之为顶层接口&#xff0c;Collection接口下面又有两个子接…...

从仿真到论文图表:手把手教你用FDTD参数扫描和Matlab处理WO3薄膜光学数据

从仿真到论文图表&#xff1a;FDTD参数扫描与Matlab数据可视化全流程解析 在光电材料研究中&#xff0c;WO₃薄膜因其优异的电致变色特性备受关注。当我们需要系统研究薄膜厚度对光学性能的影响时&#xff0c;FDTD Solutions的参数扫描功能配合Matlab的数据处理能力&#xff0c…...

绝地求生罗技鼠标宏实战指南:5步实现高效压枪技巧

绝地求生罗技鼠标宏实战指南&#xff1a;5步实现高效压枪技巧 【免费下载链接】logitech-pubg PUBG no recoil script for Logitech gaming mouse / 绝地求生 罗技 鼠标宏 项目地址: https://gitcode.com/gh_mirrors/lo/logitech-pubg 对于《绝地求生》玩家来说&#xf…...

InvestorFinder 技术架构深度解析:VC 合伙人真实投资行为数据挖掘与精准匹配底层实现

摘要在一级市场股权投资领域&#xff0c;创业者与风险投资机构合伙人的精准匹配长期存在信息壁垒、数据碎片化、背景信息不对称三大核心痛点。传统投融资对接模式依赖 FA 机构人脉、线下路演、投融资社群人工对接&#xff0c;存在效率低下、匹配维度单一、投资人真实投资行为数…...

45.什么是内联条件表达式(inline conditional expressions)?在事件处理里怎么用?

内联条件表达式指的是&#xff1a;你在 JSX 里直接用 JavaScript 条件语法&#xff08;如三元 ? :、逻辑与 &&、逻辑或 ||&#xff09;来决定事件处理函数是否执行、执行哪段逻辑&#xff0c;或给事件处理器提供一个默认值。它能让事件行为跟 props/state 动态绑定&am…...

2026年小白适用Hermes Agent/OpenClaw Token Plan集成全攻略大全

2026年小白适用Hermes Agent/OpenClaw Token Plan集成全攻略大全。OpenClaw作为阿里云生态下新一代的开源AI自动化代理平台&#xff0c;曾用名Moltbot/Clawdbot&#xff0c;凭借“自然语言交互自动化任务执行大模型智能决策”的核心能力&#xff0c;正在重构个人与企业的工作效…...

别再用Excel手算了!用Python脚本快速搞定Zemax连续变焦镜头初始结构计算

别再用Excel手算了&#xff01;用Python脚本快速搞定Zemax连续变焦镜头初始结构计算 光学设计工程师们&#xff0c;你们是否还在为连续变焦镜头的初始结构计算而头疼&#xff1f;每次手动调整变倍组和补偿组的位置&#xff0c;反复在Excel中敲打公式&#xff0c;结果却总是差强…...

3分钟掌握清华PPT模板:免费打造专业学术演示文稿的终极方案

3分钟掌握清华PPT模板&#xff1a;免费打造专业学术演示文稿的终极方案 【免费下载链接】THU-PPT-Theme 清华主题PPT模板 项目地址: https://gitcode.com/gh_mirrors/th/THU-PPT-Theme 还在为学术汇报、毕业答辩或重要演讲的PPT设计而头疼吗&#xff1f;清华大学视觉设计…...

构建 AI Agent 应用商店的构想

构建 AI Agent 应用商店的构想&#xff1a;从“单骑救主”的工具到“生态协同”的智能枢纽关键词 AI Agent、应用商店、多Agent协作、工具调用链、Prompt工程标准化、安全沙箱、智能分发摘要 当你在凌晨2点对着一份混乱的月度财务报表焦虑时&#xff0c;有没有想过&#xff1a;…...