2.数据结构面试题--消失的数字

news2025/1/18 6:52:32

面试题:消失的数字

数组nums包含从0到n的所有整数,但是其中缺了一个,请编写代码找出那个缺失的整数,你有办法O(N)时间内完成吗?

方法1.排序:依次查找

如果下一个数不是上一个数+1,那么上一个数字+1就是消失的数字
冒泡排序的话时间复杂度是O(n^2)
qsort排序的话是O(NlogN)
需要用一个循环来判断如果下一个数不是上一个数+1,那么上一个数字+1就是消失的数字,准确地来说时间复杂度是O(N
logN+N),最后的N可以忽略掉,所以时间复杂度是O(N*logN).

时间复杂度都不满足题目的要求,所以这道题目不能使用排序

方法2.异或:相异为1,相同为0

思路分析
用一个数字x跟0~n的数字异或,再和缺失数字的数组异或
异或的特点:
参与运算的两个值,如果两个值相同,则结果为1,不同为1
(1)0 ^ 0=0 0 ^ 1=1
0和任何数异或=任何数
(2)1^0=1 1 ^1=0
1异或任何数=任何数取反
(3)任何数异或自己相当于把自己本身置0

题目分析:
1.将x置为0,让它去异或现有的缺失数字的数组里面的各个数字,结果保存到x中
2.再用上一步得到的x去异或原本完整的数组里面的各个元素,根据异或的特点,相同的两个数之间异或结果为0,那么最终两个数组相同的数字异或完之后剩下0去异或原来完整的数组中没有匹配到的数字(也就是消失的数字),结果就是消失的数字
画图讲解:
在这里插入图片描述

0 1 2 3 4 5 6 7 8 9
假设x就是消失的数字
假设x=0
0和任何数字异或,结果是任何数
先和第一个缺失数字的数组异或,遍历数组的时间复杂度是O(N)
再和第二个完整的数组异或,时间复杂度是O(N+1)
总的来说这个方法的时间复杂度是O(N+N+1)也就是O(2*N+1)
时间复杂度实际上还是O(N)

注意:
异或满足交换律
1 1 2异或和1 2 1 异或的结果相同

int missingNumber(int* nums, int numsSize) {
	int x = 0; //和数组里面的每个值异或
	for (int i = 0; i < numsSize; ++i)
	{
		x ^= nums[i];
	}
	for (int i = 0; i < numsSize; i++) {
		x ^= i;
	}
	return x;
}

方法3.0-N等差数列计算完整数组的和,减去缺失数字的数组里面的各个数字

等差数列求和的时间复杂度是O(1)
减数组里面的值需要遍历一遍,时间复杂度是O(N)
这个方法的时间复杂度是O(N+1)也就是O(N)

#include<stddef.h>   //size_t是C标准在stddef.h中定义的,size_t类型表示C中任何对象所能达到的最大长度,它是无符号整数
//size_t在32位系统上定义为unsigned int,也就是32位无符号整型.
//size_t在64位系统上定义为unsigned int,也就是64位无符号整型.
int missingNumber(int* nums, int numsSize) {
	int x = (0 + numsSize) * (numsSize+1) / 2;
	for (size_t i = 0; i < numsSize; i++) {
		x -= nums[i];
	}
	return x;
}

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

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

相关文章

Python爬虫——urllib_get请求的quote方法和urlencode方法

quote方法&#xff1a; 将字符转换为对应Unicode编码 import urllib.request import urllib.parse# 获取 https://www.baidu.com/s?wd周杰伦 网页源码 url "https://www.baidu.com/s?wd" headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKi…

stm32 报错 dev_target_not_halted

烧录stm32H743&#xff0c;在cubeprogrammer里面点击connect&#xff0c;报错dev_target_not_halted 解决方法&#xff1a;先把H743的boot0引脚接到高电平上&#xff0c;然后少上电&#xff0c;此时会停止内核的运行&#xff0c;再点击connect即可 H743管脚&#xff1a; 在芯…

windows系统 安装 InfluxDB

一、InfluxDB下载 InfluxDB的windows&#xff08;64-bit&#xff09;下载地址为&#xff1a;https://dl.influxdata.com/influxdb/releases/influxdb-1.7.7_windows_amd64.zip 二、安装 influxDB是不需要安装的&#xff0c;只需要将压缩文件解压到相应的目录即可&#xff1b;…

STM32CubeMX+Eclipse+gcc+Jlink 实现STM32开发环境搭建

本节记录通过STM32CubeMXEclipsegccJlink 进行STM32环境搭建的过程&#xff1b; 文章目录 一、环境确认二、Eclipse建立工程三、指定编译路径四、选择gcc路径五、选择make路径六、 选择Device 参考&#xff1a; https://blog.csdn.net/qq_35787848/article/details/124395509 h…

OPPO手机便签怎么上传录音文件?

相信很多网友对OPPO这个手机品牌并不陌生&#xff0c;因为它凭借时尚轻薄的外观设计、流畅简约的系统、清晰的拍照摄影以及高中低不同的价位选择&#xff0c;赢得了不少年轻消费者的青睐。不过在使用OPPO手机的过程中&#xff0c;也有不少用户表示自己遇到了各种各样的问题&…

mycat设置sql隔离级别的问题

问题 General log中出现大量SQL “SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ”。 该语句会引起两个问题&#xff0c; 1: "REPEATABLE READ"不是我们预期的事物隔离级别。 2: 大量无效的SQL影响性能。 注&#xff1a; MySql的可重复读会带来怎样…

高科技感发光地球(全息地球)的制作

目录 一、新建合成&#xff0c;导入素材 二、添加Form粒子 三、复制一层Form粒子 四、添加plexus 粒子 五、复制一层 plexus 粒子 六、添加调整层增加颜色 七、增加shine 效果 八、添加发光效果 九、最终效果图 高科技感发光地球&#xff08;全息地球&#xff09;的效…

自动化测试工具比传统测试工具的优势体现在哪里?

随着软件行业的快速发展和扩张&#xff0c;自动化测试工具在提高测试效率和质量方面起到了不可或缺的作用&#xff0c;那你知道自动化测试工具比传统测试工具的优势体现在哪里吗&#xff1f; 首先&#xff0c;自动化测试工具能够大大缩短测试周期。相比于传统手动测试&#xff…

在 3ds Max 中对二战球形炮塔进行建模

推荐&#xff1a; NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 实际上被称为“斯佩里球炮塔”&#xff0c;它被用于二战的B-17和B-24轰炸机。 本教程介绍如何在 3ds Max 中对球形转塔进行建模。建模时&#xff0c;您将使用背景图片作为辅助。首先创建一个低多边形球体。…

【Linux系统编程(文件编程)】之复现cp指令、修改文件应用

文章目录 一、文件操作原理二、文件操作步骤三、实现 cp 复制指令四、修改配置文件五、写一个整数到文件六、写结构体数组到文件01 结构体02 结构体数组 一、文件操作原理 文件描述符&#xff1a; 对于内核而言&#xff0c;所有打开文件都由文件描述符引用。文件描述符是一个…

Docker:overlay2浅析以及解决overlay2 文件过大的问题

最近在学习docker的实现时看到这么一个概念&#xff1a;Union File System&#xff0c;先让我们来介绍介绍它。 Union File System 定义&#xff1a;联合文件系统&#xff08;UnionFS&#xff09;是一种分层、轻量级并且高性能的文件系统&#xff0c;它支持对文件系统的修改作…

VSCode 最全实用插件(VIP典藏版)

目录 一、必备插件 &#x1f33e;Chinese&#xff08;中文&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#xff09; &#x1f921;Settings Sync&#xff08;配置同步到云端&#xff09; &#x1f308;wakatime&#xff08;编程时间及行为跟踪统计&…

多目标跟踪数据关联算法

跟踪门 跟踪门的作用是将观测回波分配给已建立的目标轨迹或者新目标轨迹的一种粗略检验方法&#xff0c; 是机动目标跟踪中首当其冲的问题 。跟踪门是跟踪空间中的一块子空间 &#xff0c;中心位于被跟踪目标的预测状态 &#xff0c;其大小由接收正确回波的概率确定。设置的跟…

阿里云AliYun物联网平台使用-客户端API获取设备传感数据

一、前言 上一篇文章中&#xff0c;已经实现了虚拟数据上云&#xff0c;本文我们将进行上位机客户端的开发&#xff0c;即通过调用阿里云IOT物联网云平台的SDK&#xff0c;开发能获取传感器的遥感数据。 二、云平台操作 调用API需要用户的AccessKey Secret&#xff0c;这意味着…

使用IDEA的Run DashBoard

在微服务开发过程中&#xff0c;我们需要开启很多的服务&#xff0c;为了方便管理&#xff0c;我们可以使用IDEA的Run DashBoard来启动相关服务。 默认情况下&#xff0c;IDEA检测到你的项目中由SpringBoot项目时&#xff0c;会提示你开启Run DashBoard。如果没有开启的话&…

MySql5.6版本开启慢SQL功能

文章目录 1引言1.1目的1.2注意点说明1.3 操作步骤1.3.1 临时生效操作步骤1.3.2 永久生效操作步骤1.3.3 按日期生成日志文件1.3.4 执行成功后验证功能是否开启 1.4 慢SQL日志记录内容介绍1.5 Shell脚本 1引言 1.1目的 开启 MySQL 的慢查询日志&#xff08;Slow Query Log&…

【Spring core学习二】创建Spring 项目 Spring的存

目录 &#x1f31f;一、创建最原始的Spring-core项目。 &#x1f31f;二、怎么往Spring中存取对象&#xff1f; &#x1f337;1、在Spring中存对象 &#x1f337;2、通过getBean获取对象的三种方式 &#x1f337;3、通过factory方式获取对象 &#x1f31f;三、对存对象的…

3分钟了解Android中稳定性测试

一、什么是Monkey Monkey在英文里的含义是猴子&#xff0c;在测试行业的学名叫“猴子测试”&#xff0c;指的是没有测试经验的人甚至是根本不懂计算机的人&#xff08;就像一只猴子&#xff09;&#xff0c;不需要知道程序的任何用户交互方面的知识&#xff0c;给他一个程序&a…

TCP协议3次握手4次挥手

建立一个TCP连接时&#xff0c;需要客户端和服务端总共发送3个包以确认连接的建立&#xff0c;在socket编程中&#xff0c;这一过程由客户端执行connect来触发&#xff0c;在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。 TCP三次握手的过程如下:第一次握…

【编译之美】【5. 代码优化:数据流分析】

有些优化只能在全局优化中做&#xff0c;在本地优化中做不了&#xff0c;比如&#xff1a; 代码移动&#xff08;Code motion&#xff09;能够将代码从一个基本块挪到另一个基本块&#xff0c;比如从循环内部挪到循环外部&#xff0c;来减少不必要的计算。&#xff08;循环剥离…