重生之我是孔乙己——查找数组缺失元素的几种方法

news2025/1/13 16:40:41

 0573c76fa57743138d15fc21a3bb4e82.gif

  • 💌 博客内容:查找缺失元素

  • 😀 作  者:陈大大陈

  • 🚀 个人简介:一个正在努力学技术的准前端,专注基础和实战分享 ,欢迎私信!

  • 💖 欢迎大家:这里是CSDN,我总结知识和写笔记的地方,喜欢的话请三连,有问题请私信 😘 😘 😘

目录

题目 

排序法 

异或法 

最天才的方法

题目 

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

示例 1:

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

示例 2:

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

排序法 

第一种方法,需要用到qsort函数,先将数组按从小到大排好序,然后遍历,当下标与该数组元素不相等时,返回这个数组元素的值。 

冒泡排序的时间复杂度是o(n^2),而快速排序的时间复杂度是o(n*logn),我们选择效率更优的快速排序。 排序之后我们需要遍历数组,那程序总共需要执行n*logn+n次。

时间复杂度是o(n*logn)。

#include<stdio.h>
#include<stdlib.h>
int cmp(const void* a, const void* b)
{
	return *(int*)a - *(int*)b; //由小到大排序
	//return *(int *)b - *(int *)a; 由大到小排序
}
int missingNumber(int* nums, int NumsSize)
{
	int i;
	qsort(nums, NumsSize, sizeof(nums[0]), cmp);
	for (i = 0; i <=NumsSize; i++)
	{
		if (i != nums[i])
		{
			return i;
		}
	}
	return -1;
}
int main()
{
	int a[] = {7,9,10 ,0,3,4,1,2,5,6};
	if (missingNumber(a, sizeof(a) / sizeof(a[0])) == -1)
	{
		printf("未找到\n");
	}
	else
		printf("%d",missingNumber(a, sizeof(a) / sizeof(a[0])));
	return 0;
}

异或法 

异或,这个方法思路类似于之前找单身狗那道题,异或的两个元素相同为0,相异为1。 

要注意第二次遍历次数是数组大小加一,原因是要加上缺失的那一个元素。

除了缺失的元素,其余元素异或的结果一定为0,所以第二次异或的结果一定是缺失的元素值。

程序要执行2n次。 

时间复杂度:o(n),比第一种效率更高。 

#include<stdio.h>
#include<string.h>
int main()
{
	int a[] = { 7,9,10 ,0,3,4,1,2,5,6 };
	int i = 0;
	int x = 0;
	while (i <sizeof(a)/sizeof(a[0]))
	{
		x ^= a[i];
		i++;
	}
	for (i = 1; i <= sizeof(a)/sizeof(a[0]) + 1; i++)
	{
		x ^= i;
	}
	printf("%d", x);
	return 0;
}

最天才的方法

鬼才才能想出来的方法,果然是大道至简!

第一次遍历将整个数组以及缺失的元素加到一起。

第二次遍历将原数组的值挨个减掉,这样最后剩下的值一定就是所缺失的元素。

时间复杂度是惊人的o(n),芜湖,最好使竟是最单纯的,感动了!

dc531c2c349c46bda572e5660d639b0b.jpeg

int missingNumber(int* nums, int numsSize) {

	int sum = 0;
	for (int i = 0; i < numsSize + 1; i++)
	{
		sum += i;
	}
	for (int i = 0; i < numsSize; i++)
	{
		sum -= nums[i];
	}
	return sum;

}

总结
  感谢观看,本文到这里就结束了,如果觉得有帮助,请给文章点个赞吧,让更多的人看到。🌹 🌹 🌹

7673ea0a00c3431893891e0c2913a10e.jpeg 

  也欢迎你,关注我。👍 👍 👍

  原创不易,还希望各位大佬支持一下,你们的点赞、收藏和留言对我真的很重要!!!💕 💕 💕 最后,本文仍有许多不足之处,欢迎各位认真读完文章的小伙伴们随时私信交流、批评指正!下期再见。🎉

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

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

相关文章

【MySQL | 基础篇】03、MySQL 约束

目录 一、概述 二、约束演示 三、外键约束 3.1 介绍 3.2 语法 3.3 删除/更新行为 一、概述 概念: 约束是作用于表中字段上的规则&#xff0c;用于限制存储在表中的数据。 目的&#xff1a;保证数据库中数据的正确、有效性和完整性。 分类&#xff1a; 注意&#xff1a…

千耘农机导航的“星地一体”能力究竟是什么?

伴随农业机械化和智能化的发展&#xff0c;越来越多的人开始使用农机自动驾驶系统助力耕作&#xff0c;千耘农机导航的“星地一体”能力可有效解决信号受限的问题&#xff0c;实现作业提效。究竟什么是“星地一体”&#xff0c;又是如何解决智能化农机作业的痛点的&#xff1f;…

CTFHub | 00截断

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

Java模拟星空

目录 前言 JavaFX基础 1. GraphicsContext 2. AnimationTimer 代码实现 完整代码 前言 看了Python模拟星空很漂亮&#xff0c;Java也应该必须有一个&#xff01; 环境&#xff1a;只需要JDK1.8就好&#xff01;不需要外部包&#xff01;&#xff01;&#xff01; Jav…

力扣-《剑指offer》-简单题

目录 第一题&#xff1a;05.替换空格 第二题&#xff1a;06.从尾到头打印链表 第三题&#xff1a;11.旋转数组的最小数字​编辑 第四题&#xff1a;17.打印从1到最大的n位数 第五题&#xff1a;29.顺时针打印矩阵 第六题&#xff1a;53.在排序数组中查找数字 第七题&#…

【C++】关于多线程,你应该知道这些

​&#x1f320; 作者&#xff1a;阿亮joy. &#x1f386;专栏&#xff1a;《吃透西嘎嘎》 &#x1f387; 座右铭&#xff1a;每个优秀的人都有一段沉默的时光&#xff0c;那段时光是付出了很多努力却得不到结果的日子&#xff0c;我们把它叫做扎根 目录&#x1f449;多线程相…

Python自动化测试 环境搭建 详解

一、安装Python环境&#xff1a; Python环境目前已被大部分主流操作系统所支持&#xff0c;比如在Linux、Mac、Unix等系统上就自带了Python环境&#xff0c;但在Windows系统上目前还需要自己安装。 1、下载Python Python下载地址&#xff1a;https://www.python.org/downloads…

Flink 1.14测试cdc写入到kafka案例

测试案例 1、遇到的问题 1.1 bug1 io.debezium.DebeziumException: Access denied; you need (at least one of) the REPLICATION SLAVE privilege(s) for this operation Error code: 1227; SQLSTATE: 42000.at io.debezium.connector.mysql.MySqlStreamingChangeEventSour…

网络编程(第一章:网络基础)

文章目录一. 网络基础1.2 联网协议和层1.2.1 网络采用分层的思想1.2.2 OSI体系结构&#xff08;重点&#xff01;&#xff01;)1.2.3 TCP/IP协议1.2.3.1 网络接口与物理层1.2.3.2 网络层1.2.3.3 传输层1.2.3.4 应用层1.2.4 网络封包与拆包1.3 TCP和UDP的异同点&#xff08;重点…

【活动】高效学习方法分享

1 写在前面 当今社会&#xff0c;学习已成为每个人不可避免的事情。无论是在校生还是职场人士&#xff0c;我们都需要不断地更新自己的知识和技能。而如何高效地学习&#xff0c;则成为了许多人迫切需要解决的问题。本文将分享一些高效学习方法&#xff0c;帮助你更快、更好地…

Redis学习笔记之(Redis认识、安装、启动、命令行客户端、图形化界面)

目录 初识Redis 认识NOSQL认识Redis安装Redis Redis常见命令 5种常见数据结构通用命令不同数据结构的操作命令 Redis的Java客户端 Jedis客户端SpringDataRedis客户端 认识NOSQL 认识NoSQL SQLNoSQL数据结构结构化(Structured)非结构化数据关联关联的(Relational)无关联…

Symble

ES6引入了一种新的原始数据类型 Symbol&#xff0c;表示独一无二的值。它是JavaScript语言的第七种数据类型&#xff0c;是一种类似于字符串的数据类型。 Symbol特点 Symbol 的值是唯一的&#xff0c;用来解决命名冲突的问题 Symbol值不能与其他数据进行运算 Symbol定义的对…

SadTalker项目上手教程

背景 最近发现一个很有趣的GitHub项目SadTalker&#xff0c;它能够将一张图片跟一段音频合成一段视频&#xff0c;看起来毫无违和感&#xff0c;如果不仔细看&#xff0c;甚至很难辨别真假&#xff0c;预计未来某一天&#xff0c;一大波网红即将失业。 虽然这个项目目前的主要…

基于 DSP+FPGA+1553B总线的水下信息融合系统的设计

在一个大型水下系统中&#xff0c;针对不同分系统的特 性&#xff0c;通常采用不同的通信协议。串行通信具有抗干扰 能力强&#xff0c;传输距离远等特点&#xff0c;适用于需要远距离通信 的分系统&#xff1b;MIL-STD-1553B 总线在传输方面具有极强 的可靠性和实时性&#xf…

关于“复活节Easter”知识,你了解多少?

复活节是基督教纪念耶稣复活的节日。耶稣被钉死在十字架上&#xff0c;死后第三天复活。Christians say Jesus died on Friday. On the third day, he rose from the dead. He became alive again. 复活节定在每年春分月圆之后第一个星期日举行。因为春分之后日照时间比较长&am…

《菲波那契凤尾》:菲波那契数列,返回最后6位

目录 一、题目 二、思路 1、斐波那契数列 2、返回最后6位 三、代码 详细注释版本&#xff1a; 简化注释版本&#xff1a; 一、题目 菲波那契凤尾 题目链接&#xff1a;菲波那契凤尾 NowCoder号称自己已经记住了1-100000之间所有的斐波那契数。为了考验他&#xff0c…

【实用篇】SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud分布式

文章目录一、服务拆分1.1 服务拆分Demo1.2 微服务远程调用二、Eureka2.1 Eureka原理2.2 Eureka-server服务搭建2.3 eureka-client服务注册2.4 eureka-client服务复制2.5 eureka服务发现三、Ribbon负载均衡3.1 负载均衡原理3.2 负载均衡策略3.3 自定义负载均衡策略3.4 饥饿加载与…

每日学术速递4.12

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.HC 随着新的“生成代理”论文的发布&#xff0c;LLM刚刚达到了一个重要的里程碑——通过使用 LLM&#xff0c;生成代理能够在受《模拟人生》启发的交互式沙箱中模拟类人行为。代理架构扩展…

Vue的过滤器、内置指令和生命周期【Vue】

Vue 1. 收集表单数据 收集表单数据&#xff1a; 若&#xff1a;< input type“text”/ >&#xff0c;则v-model收集的是value值&#xff0c;用户输入的就是value值。 若&#xff1a;< input type“radio”/ >&#xff0c;则v-model收集的是value值&#xff0c;且…

NIFI大数据进阶_离线同步MySql数据到HDFS_说明操作步骤---大数据之Nifi工作笔记0028

然后我们看如何把mysql中的数据,实时的同步到hdfs中去 准备工作首先,创建一个mysql表,然后启动hadoop集群 处理器我们需要这些处理器,首先通过querydatabasetable处理器,查询mysql中的数据,然后,把mysql中的数据,导入到 convertavrotojson处理器,注意querydatabasetable处理…