面试题 17.04. 消失的数字

news2024/11/16 19:28:14

顺序表题目

  • 消失的数字
    • 1、题目详情
    • 2、题目详解
      • (1)方法1
      • (2)方法2
      • (3)方法3
      • (4)方法4:

消失的数字

1、题目详情

题目链接:leetcode消失的数字

数组nums包含从0到n的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗?
注意:本题相对书上原题稍作改动

示例 1:

输入:[3,0,1]
输出:2

示例 2:

输入:[9,6,4,2,3,5,7,0,1]
输出:8

2、题目详解

(1)方法1

既然是从0到n的数字,我们可以直接对其进行排序。排序后,我们利用相邻元素的差为1,即可找到消失的数字。
这里的排序算法,我们选择的是归并排序,因为在排序算法中归并排序的时间复杂度是较低的。

#include<iostream>
using namespace std;
#include<cstdio>

void merge(int* arr, int low, int mid, int high)
{
	int* b = new int[high - low + 1];
	int i = low, j = mid + 1, k = 0;
	while (i <= mid && j <= high)
	{
		if (arr[i] <= arr[j])b[k++] = arr[i++];
		else b[k++] = arr[j++];
	}
	while (i <= mid)b[k++] = arr[i++];
	while (j <= high)b[k++] = arr[j++];
	for (i = low, k = 0; i <= high; i++)
		arr[i] = b[k++];
	delete[] b;
}
void mergesort(int* A, int low, int high)
{
	
	if (low < high)
	{
		int mid = (low + high) / 2;
		mergesort(A, low, mid);
		mergesort(A, mid + 1, high);
		merge(A, low, mid, high);
	}
}
int main()
{
	int n;
	scanf("%d",&n);
	int arr[n];
	for (int i = 0; i < n; i++)
	{
		scanf("%d",arr+i);
	}
	mergesort(arr,0,n-1);
	for(int i=0;i<n-1;i++)
	{
		if(arr[i+1]-arr[i]==2)
		{
			printf("%d",arr[i+1]-1);
			return 0;
		}

	}
	printf("%d",n+1);
	
	
	return 0;
}

我们观察上面方法的空间复杂度和时间复杂度:

时间复杂度:O(nlogn)
空间复杂度:O(n)

这种方法的效率貌似并不高!并且不符合题目中时间复杂度为O(n)的要求!
(上面的方法行不通,这里就不把它写成接口函数的形式了。)

(2)方法2

我们可以将0-n的数字相加,然后减去输入的数字,最终得到的就是结果。

int missingNumber(int* nums, int numsSize)
{
    int sum1 = 0;
    int sum2 = 0;
    int temp = numsSize;
    int count = numsSize;
    while (temp--)
    {
        sum1 += count--;    
    }
    for (int i = 0; i < numsSize; i++)
    {
        sum2 += nums[i];
    }
    return (sum1 - sum2);
}

时间复杂度:O(N)
空间复杂度:O(1)

在这里插入图片描述

(3)方法3

我们开辟一个新的数组,然后将出现的数字记录到相应的位置,最后遍历数组,找到没有记录痕迹的数字。

int missingNumber(int* nums, int numsSize)
{
    int b[numsSize+1];
    for(int i=0;i<numsSize+1;i++)
    {
        b[i]=0;
    }
    for (int i = 0; i < numsSize; i++)
    {
        b[nums[i]] = 1;
    }
    for (int i = 0; i < numsSize+1; i++)
    {
        if (b[i] == 0)
        {
            return i;
        }
    }
    return -1;
}

在这里插入图片描述
时间复杂度:O(N)
空间复杂度:O(N)

(4)方法4:

我们设定一个X=0,让X先跟[0,n]的所有值异或,X在跟数组中的每个值异或,最终X的值就是缺少的那个数字。
原理:
两个相同的数字异或结果是0。
0和任何数字异或都为数字本身。

int missingNumber(int* nums, int numsSize)
{
    int a = 0;
    int max = numsSize;
    while (max)
    {
        a ^= max--;
    }
    for (int i = 0; i < numsSize; i++)
    {
        a ^= nums[i];
    }
    return a;

}

在这里插入图片描述
时间复杂度:O(N)
空间复杂度:O(1)

总结一下上述的方法:
方法1:时间复杂度:O(nlogn) 空间复杂度:O(n)
方法2:时间复杂度:O(N) 空间复杂度:O(1)
方法3:时间复杂度:O(N) 空间复杂度:O(N)
方法4:时间复杂度:O(N) 空间复杂度:O(1)

所以方法2和方法4是最优解。

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

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

相关文章

CSS——基础学习

目录 一&#xff0c;什么是CSS 二&#xff0c;基本语法规范 三&#xff0c;引入方式 1.内部样式表 2.行内样式表 3.外部样式 四&#xff0c;代码风格 1.样式格式 (1).紧凑风格 (2).展开风格(推荐) 2.样式大小写 3.空格规范 五&#xff0c;选择器 1.选择器的种类 …

牛客网-《刷C语言百题》第二期

✅作者简介&#xff1a;嵌入式入坑者&#xff0c;与大家一起加油&#xff0c;希望文章能够帮助各位&#xff01;&#xff01;&#xff01;&#xff01; &#x1f4c3;个人主页&#xff1a;rivencode的个人主页 &#x1f525;系列专栏&#xff1a;《C语言入门必刷百题》 &#x…

[每周一更]-(第18期):Postman全局配置token信息,加速测试接口进度

Postman作为API调试工具&#xff0c;对于后端开发至关重要&#xff0c;开发、测试、写文档&#xff0c;都必不可少&#xff0c;但是日常使用过程中都是token校验&#xff0c;不同接口之间都会携带token头信息&#xff0c;但是接口的情况&#xff0c;除了写请求参数也要一个个配…

FCOS相关

因为用到了某家带bpu的(懂的都懂) 他们支持这个只是demo做的有点差 还没有c的~~ 因为他们用所以就搬来了 勿怪啊 基于昨天和他们相关的tops 又说说这个!! FCOS是一种基于全卷积的单阶段目标检测算法&#xff0c;并且是一种Anchor box free的算法。其实现了无Anchor&#xff…

该反省了!元数据管理平台为什么会被当成一件“摆设”?

尽管企业越来越意识到元数据管理的重要性&#xff0c;但是在实际中很多应用并没有发挥应有的价值。 前不久与一个行业客户沟通&#xff0c;他提出让他们帮着总结一下元数据管理到底有哪些应用场景&#xff0c;他感觉元数据管理平台就是一种摆设呢&#xff1f; 说者无意听者有心…

1978,1990,2020,2026,2041,2051

文章目录总结1978. 上级经理已离职的公司员工1990. 统计实验的数量[建立两个临时表并笛卡尔积]2020. 无流量的帐户数2026. 低质量的问题2041. 面试中被录取的候选人2051.商店中每个成员的类别总结 多表左连接转2051题【重点】 其他待补充 1978. 上级经理已离职的公司员工 # Wr…

【前端】HTML入门 —— HTML的常见标签

JavaEE传送门JavaEE 网络原理——No.4 传输层_TCP协议中的延迟应答, 捎带应答, 面向字节流与TCP的异常处理 网络原理——网络层与数据链路层 目录网站HTML认识 HTML 标签HTML 常见标签注释标签标题标签段落标签换行标签格式化标签图片标签超链接标签表格标签列表标签表单标签…

【Java学习笔记】第三章 数组知识点大全

文章目录3. 数组3.1 数组的概述3.2 一维数组的使用3.2.1 一维数组初始化3.2.2 一维数组内存解析3.3 多维数组的使用3.3.1 多维数组初始化3.3.2 多维数组的注意事项&#xff1a;3.3.3 int[] x,y[]3.3.4 多维数组的内存解析3.4 数组中涉及到的常见算法3.4.1 线性查找3.4.2 二分法…

【PCL】PCL点云库介绍及VS环境配置

文章目录PCL介绍Windows PCL环境配置PCL介绍 PCL是跨平台点云处理库&#xff0c;用来点云可视化、分割、聚类等应用。 PCL官网在这&#xff1a;https://pointclouds.org/ Github库在这&#xff08;这里用1.8.1&#xff09;&#xff1a;https://github.com/PointCloudLibrary…

DASCTF X GFCTF 2022十月挑战赛 - pwn

DASCTF X GFCTF 2022十月挑战赛 - pwn 简单题&#xff0c;自己做了一下发现要比官方wp思路麻烦一点&#xff0c;所以这里就用官方wp的思路 高版本编译出来的&#xff0c;所以没有csu这种万能的gadget&#xff0c;果断看一下汇编 看完之后仔细思考了一下发现这里完全可以使用…

案例篇:Python爬虫的多重领域使用

大家好呀&#xff01; 相信大家早有体会&#xff0c;大数据时代已到&#xff0c;数据的获取和分析已被应用于各行各业&#xff0c;在诸多领域承担着重要决策的作用&#xff0c;如互联网就业选择。 Python爬虫作为最好的数据采集技术&#xff0c;市场对它需求一直在增涨&#xf…

vue3-tauri-chat:基于tauri聊天实例|tauri仿微信客户端

Vue3.jsTauri桌面端聊天实例|tauri仿微信/QQ聊天TauriChat。 基于taurivite3.xvue3element-plus等技术开发客户端仿微信/QQ聊天实战案例。实现发送消息、预览图片/视频/网址链接、拖拽/粘贴发送图片、朋友圈等功能。 使用技术 编辑器&#xff1a;VScode使用技术&#xff1a;ta…

【C++笔试强训】第十五天

&#x1f387;C笔试强训 博客主页&#xff1a;一起去看日落吗分享博主的C刷题日常&#xff0c;大家一起学习博主的能力有限&#xff0c;出现错误希望大家不吝赐教分享给大家一句我很喜欢的话&#xff1a;夜色难免微凉&#xff0c;前方必有曙光 &#x1f31e;。 &#x1f4a6;&a…

C++模板

目录 ​一、认识模板 1.什么是模板 2.模板的分类 二、函数模板 1.泛型和函数模板 2.函数模板的格式 三、类模板 四、实例化 1.隐式实例化 2.显式实例化 3.隐式类型转换 4.模板参数的匹配原则 一、认识模板 1.什么是模板 模板&#xff08;Template&#xff09;指C…

Java笔记(十一)

文献种类&#xff1a;专题技术总结文献 开发工具与关键技术&#xff1a; IntelliJ IDEA、Java 语言 作者&#xff1a; 方建恒 年级&#xff1a; 2020 撰写时间&#xff1a; 2022 年 10 月 28 日 Java笔记(十一) 今天我给大家继续分享一下我的Java笔记&#xff0c; 我们来了解…

CTFHub | 报错注入

0x00 前言 CTFHub 专注网络安全、信息安全、白帽子技术的在线学习&#xff0c;实训平台。提供优质的赛事及学习服务&#xff0c;拥有完善的题目环境及配套 writeup &#xff0c;降低 CTF 学习入门门槛&#xff0c;快速帮助选手成长&#xff0c;跟随主流比赛潮流。 0x01 题目描述…

第二站:分支与循环(第二幕)

目录 三、循环 1.while循环 &#xff08;1&#xff09;基本原理与用法 &#xff08;2&#xff09;break在while循环中的作用 &#xff08;3&#xff09;continue在while循环中的作用 &#xff08;4&#xff09;一图总结while循环 2.for循环 &#xff08;1&#xff09;基…

[SpringBoot] 多模块统一返回格式带分页信息

✨✨个人主页:沫洺的主页 &#x1f4da;&#x1f4da;系列专栏: &#x1f4d6; JavaWeb专栏&#x1f4d6; JavaSE专栏 &#x1f4d6; Java基础专栏&#x1f4d6;vue3专栏 &#x1f4d6;MyBatis专栏&#x1f4d6;Spring专栏&#x1f4d6;SpringMVC专栏&#x1f4d6;SpringBoot专…

算法刷题路线总结与相关资料分享

算法刷题路线总结与相关资料分享前言一、算法刷题路线总结二、算法题刷题步骤三、基础数据结构与算法知识1、时间复杂度2、空间复杂度3、线性表4、栈与队列5、树四、算法学习相关资料推荐1.数据结构与算法基础2.专项刷题路线资料3.算法课程视频资料后记前言 本文为算法刷题路线…

双十一数码产品哪些值得买?双十一好物产品分享

双十一必然是数码产品最值得买的&#xff0c;因为这类产品的优惠力度往往是最大的&#xff0c;所以每年的双十一都是升级数码设备的好时机&#xff0c;今天为大家带来的是便是个人推荐的双十一数码好物。好了&#xff0c;废话不再多说&#xff0c;我们开车吧。 一、不伤耳的骨…