java数据结构与算法刷题-----LeetCode260. 只出现一次的数字 III

java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846

文章目录

    • 与运算取末尾1分组

在这里插入图片描述

与运算取末尾1分组

解题思路:时间复杂度O( n n n),空间复杂度O( 1 1 1)
  1. 数组中有两个元素a和b出现1次,剩余都出现2次
  2. 通过异或操作,将出现2次的都抵消掉,获得两个出现一次的数的异或结果a^b
  3. 我们知道a^b的结果是,两者二进制中,值不同的位 = 1,相同的 = 0.
  4. 我们拿到a^b的最右边一个1,也就是a和b最右边的不相同的一位rightOne。也就是说rightOne位置,a的二进制和b的二进制不同,一个1,一个0

获取a的二进制最右边的1的经典操作办法是 rightOne = a & (-a).如果不懂,可以参考下面文章中,与运算的讲解

位运算https://blog.csdn.net/grd_java/article/details/136119268
  1. 既然我们拿到了rightOne。他的二进制形式是整个二进制串,只有一个1,例如0000010000,而这个1的位置,是区分a和b的关键,因为a和b中,只有一个在rightOne的位置是1.而另一个一定是0. 因为a^b后,1的位置代表a和b不同的位置
  2. 这样我们将整个数组分成两组,在rightOne位置为1的,和在rightOne位置为0的
  3. 然后我们对在rightOne位置为1的所有数字,进行异或统计。其中出现两次的数字,二进制不会有什么改变,在rightOne位置的二进制都一样。所以异或过程中,依然会抵消掉。最终结果会剩下出现一次的数字。a和b的一员。这里假设为a。

因为a和b只有一个在rightOne位置是1,这里假设a在rightOne位置是1.而a只出现1次,其它在rightOne位置是1的数都出现两次。异或后都会抵消。最终只剩下a

  1. 这样我们就找到了一个出现一次的数字a。然后我们还有a^b的结果,我们将a^b^a = (a^a)^b = 0^b = b.这样就找到了a和b。返回即可。
代码

在这里插入图片描述

class Solution {public int[] singleNumber(int[] nums) {int eor1 = 0;//对所有数进行异或,最后将剩下两个只出现一次的数for (int num : nums) eor1 ^= num;//两数相同异或为0,不同异或为1// eor1 : a ^ b,a和b的二进制位,如果不同结果就是1// 正负相与,保留最末尾的1int RightOne = eor1 & (-eor1);//提取最右侧的1,表示a和b二进制中,最右侧第一个两者不一样的一位,也就是这一位二进制,a和b不一样。一个在这一位是1,一个在这一位是0int eor2 = 0;//分组,保存所有在这一位是0的数的异或结果。而另一组在这一位是1的异或结果,我们可以不做统计for (int num : nums) {//遍历所有数if ((num & RightOne) == 0) {//如果num在这一位是0,而RightOne在这一位肯定是1,相与的结果必然是0,而其它位rightOne都是0,所以最终整个二进制结果一定是0eor2 ^= num;//将其进行异或,最终出现两次的都会抵消,而一定会遇上a和b中这一位是0的那个,假设是a,然后eor2 = a}}return new int[] { eor2, eor1 ^ eor2 };//eor1 = a^b 假设eor2 = a.则eor1 ^ eor2 = a ^ b ^ a = b }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/812192.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

文献速递:深度学习肝脏肿瘤诊断---基于多相增强 CT 和临床数据的恶性肝肿瘤鉴别诊断深度学习

Title 题目 Deep learning for diferential diagnosisof malignant hepatic tumors based on multi-phase contrast-enhanced CT and clinical data 基于多相增强 CT 和临床数据的恶性肝肿瘤鉴别诊断深度学习 Abstract 摘要 Liver cancer remains the leading cause of can…

计算机网络——TCP和UDP协议

目录 前言 前篇 引言 TCP与UDP之间的区别 TCP 三次握手 为什么要三次握手而不是两次握手? 丢包问题与乱序问题的解决 四次挥手 为什么客户端需要等待超时时间? UDP协议 TCP和UDP的主要区别 前言 本博客是博主用于复习计算机网络的博客&…

软件开发安全备受重视,浙江某运营商引入CWASP认证课程,

​浙江省某大型运营商是一家实力雄厚、服务优质的通信运营商,致力于为全省用户提供优质、高效的通信服务。数字时代,该运营商顺应信息能量融合发展趋势,系统打造以5G、算力网络、能力中台为重点的新型信息基础设施,夯实产业转型升…

Redis入门到通关之五大基本数据类型及其使用场景

文章目录 一 什么是NoSQL?二 Redis是什么?三 Redis五大基本类型1 String(字符串)应用场景 2 List(列表)应用场景 3 Set(集合)4 sorted set(有序集合)应用场景…

代码随想录阅读笔记-回溯【组合总和II】

题目 给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用一次。 说明: 所有数字(包括目标数)都是正整数。解集不能包含重复的组…

VBA中如何对工作表进行排序

代码 在VBA中对工作表进行排序的最简单方法是直接使用Move方法来移动工作表。 Sub SortSheetsByNameDescending()Dim sheetsDim sheet As WorksheetDim i As Integer, j As IntegerDim sortedSheets() As Array 获取当前工作簿中的所有工作表Set sheets ThisWorkbook.Sheets…

MySQL索引、B+树相关知识汇总

MySQL索引、B树相关知识汇总 一、有一个查询需求,MySQL中有两个表,一个表1000W数据,另一个表只有几千数据,要做一个关联查询,如何优化?1、为关联字段建立索引二、小表驱动大表 二、b树和b树的区别1、更高的…

什么是NLP?

🤖NLP是什么?🤖 NLP(Natural Language Processing),全称自然语言处理,是人工智能不可或缺的一环,它搭建了人与计算机之间沟通的桥梁🌉。 🛠️NLP强大功能一…

高校实习管理系统的设计与实现(论文+源码)_kaic

摘 要 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统高校实习管理系统信息管理难度大,容错率低&am…

给Parallels Desktop虚拟机下的Linux磁盘扩容

本文是以Ubuntu为例演示,涉及到的命令在centos里也同样适用 一、扩容前查看磁盘容量 二、开始扩容操作 第一步:打开PD分配更大的磁盘空间,要保证有足够大的扩容空间 我的pd里给ubuntu分配了64G的磁盘空间,所以我大概还能扩容34G…

linux学习:标准IO

目录 接口 打开文件 关闭文件 读写 每次一个字符的读写标准 IO 函数接口 每次一行的读写标准 IO 函数接口 每次读写若干数据块的标准 IO 函数接口 获取或设置文件当前位置偏移量 标准格式化 IO 函数 系统 IO 的最大特点一个是更具通用性,不管是普通文件、管…

web笔记再整理

前四天笔记在此连接: web前端笔记表单练习题五彩导航栏练习题-CSDN博客https://blog.csdn.net/simply_happy/article/details/136917265?spm1001.2014.3001.5502 # 1.边框弧度​ div {​ width: 300px;​ height: 50px;​ background-color: aqua;​ …

【刷题】图论——最小生成树:Prim、Kruskal【模板】

假设有n个点m条边。 Prim适用于邻接矩阵存的稠密图,时间复杂度是 O ( n 2 ) O(n^2) O(n2),可用堆优化成 O ( n l o g n ) O(nlogn) O(nlogn)。 Kruskal适用于稀疏图,n个点m条边,时间复杂度是 m l o g ( m ) mlog(m) mlog(m)。 Pr…

基于单片机的智能模拟路灯控制系统

摘 要: 随着电力资源的紧缺,以及光污染和雾霾天气的影响,更智能化的路灯设计对人们的日常生活意义重大。本文的智能路灯控制系统是基于单片机的控制器,通过介绍该系统相应的硬件设计和软件设计,实现定时开关和依具体情况是否需要来开关路灯和进行亮度调节,并且具有自检功能…

Springboot+Vue项目-基于Java+MySQL的房产销售系统(附源码+演示视频+LW)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:Java毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计 &…

谷歌现在被授权在云端托管机密数据

谷歌公共部门在周二为其美国政府客户实现了一个重要里程碑,宣布国防部授权其云平台托管秘密和绝密机密数据。 这项认证立即使谷歌的云产品与竞争对手亚马逊网络服务、 微软和甲骨文相比更具竞争力,因为它们在国防部和情报机构内争夺价值数十亿美元的业…

opencv 多线程读取和显示摄像头【python源码】

在Python中,使用OpenCV库实现多线程读取和显示摄像头通常涉及创建多个线程,每个线程负责从摄像头捕获视频帧并显示它们。但是,请注意,OpenCV本身并不直接支持多线程显示,因为cv2.imshow通常是在主线程中运行的。然而&a…

明明设置数字居中对齐,为什么excel的数字却不居中?

有时候在excel里,选中数据,设置对齐方式 左右居中,然而,数字却怎么都不居中,为什么呢? 1.按快捷键Ctrl1,打开单元格自定义格式对话框,看到是初始界面是在数字的会计专用,…

蓝桥杯python速成

总写C,脑子一热,报了个Python(有一点想锤死自己),临时抱佛脚了 1.list的插入删除 append extend insert(在索引位插入99)---忘记用法别慌,用help查询 remove(去掉第一个3…

【测试开发学习历程】python类的继承

目录 1 继承的概念 2 继承的写法 3 子类继承父类的属性和方法 4 子类新增父类没有的属性和方法 5 子类重写父类的属性和方法 6 super超类的使用 7 多继承 1 继承的概念 继承是类与类之间的一种关系,子类继承父类。通过继承可以使得子类能够拥有父类的属性和方…