面试题--消失的两个数字(困难)

 个人主页:Lei宝啊 

愿所有美好如期而遇 


目录

本题链接

输入描述

输出描述

算法分析

触类旁通一:消失的数字

题目分析

图示

解题源码

触类旁通二:只出现一次的数字III

题目分析

图示

解题源码

本题分析

解题源码 


本题链接

力扣(LeetCode)

输入描述

输入一个数组,但是这个数组实际上缺失了两个元素,并且元素最小为1。

我们输入1,也就是说,这个数组最大的元素max为nums.size() + 2,从1到max缺失了两个数。

输出描述

输出缺失的两个数。

算法分析

本题我们可以参考消失的数字,以及只出现一次的数字III,结合这两道题目,其实就已经可以尝试做这道题了,我们先来看消失的数字这道题目。

触类旁通一:消失的数字

题目分析

给定一个数组,数组元素的最大值max为nums.size(),但是这个数组缺失了一个数字,所以数组长度为nums.size()+1,我们要找缺失的那一个数字,就先定义一个变量ret = 0,让他异或这个数组,之后再遍历异或从下标0到下标nums.size()的自然数数组,就是我们缺失的数字

图示

解题源码
class Solution {
public:int missingNumber(vector<int>& nums) {int n = nums.size() + 1;int ret = 0;for(int i=0; i<n; i++) ret ^= i;for(int i=0; i<n-1; i++) ret ^= nums[i];return ret;}
};
触类旁通二:只出现一次的数字III

题目分析

给定一个数组,整个数组中只有两个数出现一次,其他数字都出现两次,我们创建变量ret = 0异或这个数组,最后ret实际上是这两个数的异或,我们如何将ret拆分出来这两个数呢?

首先,这两个数是不同的,也就是说他们32位比特位,至少有一位是不同的,我们找到这个不相同的比特位作为这两个数的区分,位置标记为pos,然后定义一个变量num = 0,在nums整个数组中,找到pos位置比特位为1的数字进行异或,由于其他数字都是成对的,所以最后剩下来的就是两个数中的一个,我们再用ret异或得到另一个

图示

解题源码
class Solution {
public:vector<int> singleNumber(vector<int>& nums) {int ret = 0, pos = 0, n = nums.size();for(int i=0; i<n; i++) ret ^= nums[i];for(int i=0; i<32; i++) {if(((ret >> i) & 1) == 1){pos = i;break;}}int num = 0;for(int i=0; i<n; i++){if(((nums[i] >> pos) & 1) == 1) num ^= nums[i];      }return vector<int>{num,num^ret};}
};
本题分析

有了上面两道题的分析,这道题我们也就是结合了缺失数字,并且缺失了两个数字。

首先缺失两个数字,我们需要异或,异或本数组,再异或一个自然数组,得到的就是这两个缺失数的异或,接着就是分开这两个数了,不就是找两个数不同的比特位pos位置,然后在nums数组和自然数组里挑选pos位置为1的数进行异或,最后区分开?

解题源码 

class Solution {
public:vector<int> missingTwo(vector<int>& nums) {int max = nums.size() + 2;int ret = 0, pos = 0, div = 0;for(auto num : nums) ret ^= num;for(int i=1; i<=max; i++) ret ^= i;for(int i=0; i<32; i++) {if((1 & (ret >> i)) == 1) {pos = i;break;}}for(int i=0; i<nums.size(); i++) {if(((nums[i] >> pos) & 1) == 1)div ^= nums[i];}for(int i=1; i<=max; i++){if(((i >> pos) & 1) == 1)div ^= i;}return vector<int>{div,ret^div};}
};

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

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

相关文章

Linux第19步_安装“Ubutun交叉编译工具链”

由于Ubuntu系统使用的GCC编译器&#xff0c;编译结果是X86文件&#xff0c;只能在X86上运行&#xff0c;不能在ARM上直接运行。因此&#xff0c;还要安装一个“Ubutun交叉编译工具链”&#xff0c;才可以在ARM上运行。 arm-none-linux-gnueabi-gcc是 Codesourcery 公司&#x…

PHP语言B/S架构医院(安全)不良事件上报系统源码

医院安全&#xff08;不良&#xff09;事件上报系统采用无责的、自愿的填报不良事件方式&#xff0c;有效地减轻医护人员的思想压力&#xff0c;实现以事件为主要对象&#xff0c;可以自动、及时、实际地反应医院的安全、不良、近失事件的情况&#xff0c;更好地掌握不良事件的…

【Docker】docker 服务相关命令

目录 1. 启动docker 服务 2.查看docker 服务的状态 3. 停止docker 服务 4.重启 docker 服务 5.开机自启动命令 1. 启动docker 服务 systemctl start docker 2.查看docker 服务的状态 systemctl status docker 3. 停止docker 服务 systemctl stop docker 此时再使用 syst…

C++八股学习心得.5

1.基类 & 派生类 一个类可以派生自多个类&#xff0c;这意味着&#xff0c;它可以从多个基类继承数据和函数。定义一个派生类&#xff0c;我们使用一个类派生列表来指定基类。类派生列表以一个或多个基类命名&#xff0c;形式如下&#xff1a; class derived-class: acce…

网络摄像机的网络连接

网络摄像机的网络连接 1. 网络连接2. 网络直通线和网络交叉线的制作方法References 1. 网络连接 网络摄像机完成安装后&#xff0c;需要进行功能的配置及参数的设置&#xff0c;您可以通过浏览器进行相关功能的配置。 有线网络连接 左侧为通过网络直通线连接的示意图&#x…

阿里云服务器Centos安装宝塔面板

阿里云服务器Centos安装宝塔面板 1 背景1.1 aliyun1.2 Linux 2 安装步骤2.0 环境配置2.1 安装前准备2.2 宝塔安装2.3 建站 3 centos常用命令3.1 防火墙相关 1 背景 1.1 aliyun 阿里云服务器是阿里云提供的一项云计算服务&#xff0c;它能够帮助用户快速搭建网站、应用和服务&…

模板模式实现分布式锁实战

前言 分布式锁相信大家都有用过&#xff0c;常见的分布式锁实现方式例如redis、zookeeper、数据库都可以实现&#xff0c;而我们代码中强引用这些分布式锁的代码&#xff0c;那么当我们以后想替换分布式锁的实现方式时&#xff0c;需要修改代码的成本会很高&#xff0c;于是我…

OpenCV图像处理|1.1 OpenCV介绍与环境搭建

1.1.1 介绍 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;开放源代码计算机视觉库&#xff0c;主要算法涉及图像处理、计算机视觉和机器学习相关方法。OpenCV 其实就是一堆 C 和 C语言的源代码文件&#xff0c;这些源代码文件中实现了许多常用的计算机视…

安装PyTorch及环境配置(应用于Python上的YOLO)

这个基本都是Bilibili网站里面叫“小手丫子”up的视频教程&#xff0c;此前自己需要装了好几次又卸载了好几次&#xff0c;现在根据视频教学整理出来自己所理解的文档。 注意事项 1.安装的pycharm版本和anaconda版本无要求。 2.运行pycharm尽量以管理员身份运行。 3.Cuda是独…

AWTK 开源串口屏开发(5) - MCU端 SDK 用法

AWTK 开源智能串口屏&#xff0c;不但开放了串口屏端全部源码&#xff0c;还提供了MCU 端 SDK&#xff0c;大大加快 MCU 软件的开发。本介绍一下 MCU 端 SDK 在不同平台上的用法。 完整示例可以参考下面的几个例子&#xff1a; 普通嵌入式系统 mcu/stm32/hmi_app/hmi_app.c 低…

docker +gitee+ jenkins +maven项目 (二)

文章目录 前言一、创建Maven项目二、常规配置1.gitee配置2.gitee仓库配置3.构建时操作4.构建后操作 总结 前言 上一篇文章介绍了Jenkins的环境配置和工具配置&#xff0c;这篇进行具体maven项目的配置 一、创建Maven项目 二、常规配置 1.gitee配置 在工具哪里配置好gitee后&…

设计模式② :交给子类

文章目录 一、前言二、Template Method 模式1. 介绍2. 应用3. 总结 三、Factory Method 模式1. 介绍2. 应用3. 总结 参考内容 一、前言 有时候不想动脑子&#xff0c;就懒得看源码又不像浪费时间所以会看看书&#xff0c;但是又记不住&#xff0c;所以决定开始写"抄书&qu…

JMeter之测试WebService接口

JMeter之测试WebService接口 1 背景2 目的3 介绍4 具体操作4.1 soapUI调用4.2 JMeter工具调用4.3 操作步骤流程4.3 重点 1 背景 WebService应用的范围是非常广&#xff0c;任何需要跨平台、跨系统进行数据交换和功能调用的场景都可以用此来实现&#xff0c;在实际的工作中也常常…

Unity中Shader的_Time精度问题

文章目录 前言一、U方向上优化二、V方向上优化在这里插入图片描述 三、最终代码1、效果2、Shader 前言 在Unity的Shader中&#xff0c;使用了_Time来达到UV的流动效果&#xff0c;普遍会出现一个问题。我们的UV值会随着时间一直增加&#xff08;uv值增加了&#xff0c;但是因为…

3元一平方公里的在线卫星影像

我们为大家分享了免费下载卫星影像的方法。 但让人遗憾的是&#xff0c;该影像的最高分辨率只有10米&#xff0c;需要更高清且比较新的卫星影像&#xff0c;看来还是得付费购买才比较靠谱。 自助选择区县范围 商业卫星影像主要面向企事业单位&#xff0c;一般来讲都比较贵&a…

Windows安装DolphinDB,配置单节点启动与GUI

1. 安装Java 首先&#xff0c;进入网址&#xff1a;jdk11 下载jdk-11.0.20_windows-x64_bin.exe&#xff0c;然后安装即可 安装完成后&#xff0c;打开命令提示符&#xff0c;输入&#xff1a; java javac如果这两个命令都出现一大堆东西&#xff0c;而不是找不到指令的提示的…

物联网云平台源码,Spring Cloud智慧工地源码,建筑施工智能化管理

智慧工地以物联网云平台为核心&#xff0c;基于智慧工地物联网云平台与现场多个子系统的互联&#xff0c;实现现场各类工况数据采集&#xff0c;存储、分析与应用。通过接入智慧工地物联网云平台的多个子系统板块&#xff0c;根据现场管理实际需求灵活组合&#xff0c;实现一体…

玩转Python:用Python处理文档,5个必备的库,特别实用,附代码

在Python中&#xff0c;有几个流行的库用于处理文档&#xff0c;包括解析、生成和操作文档内容。以下是一些常用的库及其简介和简单的代码示例&#xff1a; PyPDF2 - 用于处理PDF文件。 简介&#xff1a;PyPDF2是一个纯Python库&#xff0c;用于分割、合并、转换和提取PDF文件中…

Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models

ABSTRACT 现代大规模视觉-语言模型&#xff08;LVLMs&#xff09;采用了相同的视觉词汇-CLIP&#xff0c;可以涵盖大多数常见的视觉任务。然而&#xff0c;对于一些需要密集和细粒度视觉感知的特殊视觉任务&#xff0c;例如文档级OCR或图表理解&#xff0c;尤其是在非英语环境…

卷积神经网络(CNN)、循环神经网络(RNN)和自注意力(self-attention)对比

考虑同一个的问题&#xff1a;将由个词元组成的序列映射到另一个长度相同的序列&#xff0c;其中的每个输入词元或输出词元由维向量表示。 我们将比较能够解决上述问题的三种常用方法&#xff1a;卷积神经网络&#xff08;CNN&#xff09;、循环神经网络&#xff08;RNN&#x…