leetcode 面试题 17.19. 消失的两个数字 (hard)(优质解法)

链接:面试题 17.19. 消失的两个数字

代码:

class Solution {public int[] missingTwo(int[] nums) {int length=nums.length;int tmp=0;//将完整数据以及 nums 中的数据都进行异或,得到的就是缺失的两个数字 a^b 的结果for(int i=1;i<=length+2;i++){tmp^=i;}for(int i=0;i<length;i++){tmp^=nums[i];}//tmp 里的内容是 a^b (a,b 是缺失的两个数字)要分开 a,b 这两个数字//找到 tmp 中比特位为 1 的下标,代表 a 和 b 该下标的比特位不同int index=0;while(true){if(((tmp>>index)&1)==1){break;}index++;}//根据 index 下标的比特位进行分组,两个缺失的数字会被分开int[]ret=new int[2];for(int i=1;i<=length+2;i++){//异或所有 index 下标的比特位为 0 的数if(((i>>index)&1)==0){ret[0]^=i;}else{//异或所有 index 下标的比特位为 1 的数ret[1]^=i;}}for(int i=0;i<length;i++){if(((nums[i]>>index)&1)==0){ret[0]^=nums[i];}else{ret[1]^=nums[i];}}return ret;}
}

题解:

        本题很明确,数组的内容应该是完整的从 1 ~ N 所有的整数,但现在缺了两个,本题通过位运算异或可以很巧妙的解决

        首先需要了解异或的一些特性,a^0 = a, a^a = 0,简单来说异或的特性就是两个相同的数进行异或可以互相抵消

       以示例2为例,nums = 2,3 ,所以完整的数据应该是 1 ~ nums.length+2 ,即 1,2,3,4 ,我们将完整的数据以及 nums 中的所有数据都进行异或,其中 2,3 都有两个可以互相抵消,所以最终得到的结果就是 1^4 ,也就是我们要找的那两个缺失的数,现在首要的问题就是如何将我们要找的这两个数分离出来

        进行异或操作时,相同的比特位为 0 ,不同的比特位为 1 ,我们现在有的数据是 tmp = a^b(a,b 是要获取的缺失的数),既然想要分离 a,b 的话,就需要找 a,b 的不同之处,我们可以找出 tmp 比特位为 1 的下标,比特位为 1 就代表该下标 a 和 b 的比特位不同,将该下标比特位为 1 的数和比特位为 0 的数分开,这样 a 和 b 肯定就分开了

        由于除了 a 和 b 两个数以外,其余的数都是有两个的可以互相抵消,所以将比特位为 1 的数和比特位为 0 的数分别进行异或,最后就能得到 a,b 的值

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

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

相关文章

vue3项目 - 使用 pnpm 包管理器来创建项目

创建项目 npm install -g pnpm pnpm create vue 输入项目名称、包名称、选择要安装的依赖&#xff0c;最后 pnpm install pnpm format #规范格式 pnpm dev #启动项目

jQuery的事件-动画-AJAX和插件

一、jQuery事件处理 1.认识事件&#xff08;Event&#xff09; Web页面经常需要和用户之间进行交互&#xff0c;而交互的过程中我们可能想要捕捉这个交互的过程&#xff1a; 比如用户点击了某个按钮、用户在输入框里面输入了某个文本、用户鼠标经过了某个位置&#xff1b;浏…

使用vite创建vue3项目

1、使用管理员身份打开命令行窗口&#xff0c;输入命令: npm create vuelatest TypeScript语法选择是&#xff0c;其他依次选择否&#xff0c;创建完毕。 2、 创建完毕后打开项目&#xff0c;vscode会提示安装开发相关的插件&#xff0c;选择install 3、打开vscode终端&#x…

【力扣】199.二叉树的右视图

看到这个题目的一瞬间&#xff0c;我想递归&#xff0c;必须用递归。最近被递归折磨的有点狠&#xff0c;但是我感觉我快要打败它了&#xff0c;就是现在稍稍有点处于劣势。不过没关系&#xff0c;来日方长不是。 法一&#xff1a;递归 题解&#xff1a; 之前想的就是先递归&…

2024哪款洗地机最值得入手?热门洗地机推荐

近年来&#xff0c;洗地机的被大家熟悉&#xff0c;越来越多的家庭购置洗地机来清洁家里的卫生&#xff0c;集吸、拖、洗为一体的三重清洁方式&#xff0c;为经常打扫卫生的宝妈脱离了做家务的困境&#xff0c;不用再经历繁琐的清洁步骤(扫地→拖地→拖干)&#xff0c;一拖一拉…

做APP小程序软件开发需要注意哪些细节?

随着移动互联网的快速发展&#xff0c;APP和小程序已成为我们日常生活中不可或缺的一部分。然而&#xff0c;在开发过程中&#xff0c;许多细节常常被忽视&#xff0c;导致用户体验不佳、软件漏洞频发等问题。本文将探讨在APP和小程序开发中需要注意的细节&#xff0c;帮助开发…

华为数通方向HCIP-DataCom H12-831题库(多选题:221-240)

第221题 在割接项目的项目调研阶段需要对现网硬件环境进行观察,主要包括以下哪些内容? A、设备的位置 B、ODF位置 C、接口标识 D、光纤接口对应关系 答案:ABCD 解析: 在项目割接前提的项目调研阶段,需要记录下尽可能详细的信息。 第222题 以下哪些项能被正则表达式10*成…

2024年山东省安全员B证证考试题库及山东省安全员B证试题解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年山东省安全员B证证考试题库及山东省安全员B证试题解析是安全生产模拟考试一点通结合&#xff08;安监局&#xff09;特种作业人员操作证考试大纲和&#xff08;质检局&#xff09;特种设备作业人员上岗证考试大…

SQL server 数据库练习题及答案(练习2)

使用你的名字创建一个数据库 创建表&#xff1a; 数据库中有三张表&#xff0c;分别为student,course,SC&#xff08;即学生表&#xff0c;课程表&#xff0c;选课表&#xff09; 问题&#xff1a; --1.分别查询学生表和学生修课表中的全部数据。--2.查询成绩在70到80分之间…

JBoss JMXInvokerServlet 反序列化漏洞 CVE-2015-7501 已亲自复现

JBoss JMXInvokerServlet 反序列化漏洞 CVE-2015-7501 已亲自复现 漏洞名称漏洞描述影响版本 漏洞复现环境搭建漏洞利用 修复建议总结 漏洞名称 漏洞描述 在Oracle Rapid Planning 12.1/12.2.2中发现了一个被归类为“严重”的漏洞。受到影响的是一些未知的组件处理中间层。升…

【Spark-HDFS小文件合并】使用 Spark 实现 HDFS 小文件合并

【Spark-HDFS小文件合并】使用 Spark 实现 HDFS 小文件合并 1&#xff09;导入依赖2&#xff09;代码实现2.1.HDFSUtils2.2.MergeFilesApplication 需求描述&#xff1a; 1、使用 Spark 做小文件合并压缩处理。 2、实际生产中相关配置、日志、明细可以记录在 Mysql 中。 3、…

JAVA日志

日志 Slf4j slf4j 的全称是 Simple Loging Facade For Java&#xff0c;即它仅仅是一个为 Java 程序提供日志输出的统一接口&#xff0c;并不是一个具体的日志实现方案&#xff0c;就比如 JDBC 一样&#xff0c;只是一种规则而已。所以单独的 slf4j 是不能工作的&#xff0c;…

如何使用 Matplotlib 绘制 3D 圣诞树

系列文章目录 前言 转自&#xff1a;How to draw a 3D Christmas Tree with Matplotlib | by Timur Bakibayev, Ph.D. | Analytics Vidhya | Mediumhttps://medium.com/analytics-vidhya/how-to-draw-a-3d-christmas-tree-with-matplotlib-aabb9bc27864 因为我们把圣诞树安装…

Sql 动态行转列

SELECT ID, Name, [Month],auth FROM dbo.Test3 数据列表&#xff1a; 1.静态行专列 Select auth, MAX( CASE WHEN [Month] 一月 then Name else null end) 一月, MAX( CASE WHEN [Month] 二月 then Name else null end) 二月, MAX( CASE WHEN…

零基础学Java第一天

1.什么是Java Java是一门编程语言 思考问题&#xff1a; 人和人沟通? 中文 英文 人和计算机沟通&#xff1f; 计算机语言&#xff1a; C C C# php python 2. Java诞生 前身叫Oak&#xff08;橡树&#xff09; 目前最流行的版本还是JDK8 3.Java三大平台体系 JavaSE&#xff08…

2312llvm,用匹配器构建clang工具

原文 用LibTooling和LibASTMatchers构建工具 这里展示如何基于Clang的LibTooling构建有用的源到源翻译工具.基础 步骤0:取Clang 因为Clang是LLVM项目的一部分,因此你需要先下载LLVM的源码.Clang和LLVM都在同一个git仓库中,在不同的目录下.更多见入门指南. cd ~/clang-llvm…

(企业 / 公司项目)微服务OpenFeign怎么实现服务间调用?(含面试题)

Feign: 远程调用组件使用步骤&#xff0c;理解上面的图  后台系统中, 微服务和微服务之间的调用可以通过Feign组件来完成.  Feign组件集成了Ribbon负载均衡策略(默认开启的, 使用轮询机制),Hystrix熔断器 (默认关闭的, 需要通过配置文件进行设置开启)  被调用的微服务…

【AI服饰】孔雀背景服装_AIGC服饰订制设计咨询产业

服饰系列 AIGC&#xff08;Artificial Intelligence Generated Content&#xff09;服饰图是指通过人工智能生成的服装设计图案。随着人工智能技术的不断进步&#xff0c;AIGC服饰图在未来有着广阔的发展空间。 首先&#xff0c;AIGC服饰图可以提供更多的设计可能性。传统的服…

TypeScript学习(面试篇)

在当今的 Web 开发世界中&#xff0c;TypeScript 作为一种强大的工具为自己赢得了一席之地&#xff0c;它弥补了 JavaScript 的灵活性和静态类型语言的鲁棒性之间的差距&#xff08;至少在 JavaScript 实现自己的类型之前&#xff09;。 随着技术格局的不断发展&#xff0c;对…

【负载均衡】Keepalived 高可用详解

1、Keepalived介绍 ​ Keepalived是一个基于VRRP协议来实现LVS服务高可用方案,可以利用其来避免单点故障。一个LVS服务会使用2台服务器运行Keepalived,一台为主服务器MASTER,另一台为备份服务器BACKUP,但是对外表现为一个虚拟IP,主服务器会发送特定的消息给备份服务器,当…