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

这篇具有很好参考价值的文章主要介绍了重生之我是孔乙己——查找数组缺失元素的几种方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

  • 😀 作  者:陈大大陈

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

  • 💖 欢迎大家:这里是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),芜湖,最好使竟是最单纯的,感动了!

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

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;

}

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

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

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

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

到了这里,关于重生之我是孔乙己——查找数组缺失元素的几种方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 浅谈“孔乙己的长衫“是脱不下来还是难脱下?

    名人说:往者不可谏,来者犹可追。——《论语·微子篇》 创作者:Code_流苏(CSDN) ★温馨提示:以下仅代表个人观点,不代表其它任何人看法。 〇、缘由 “ 学历不但是我的敲门砖,也是我下不来的高台,更是孔乙己脱不下的长衫 ”。这句出自“孔乙己文学”的话语,不知是

    2023年04月26日
    浏览(22)
  • 学历不仅是敲门砖,也是我下不来的高台,更是孔乙己脱不下的长衫

    鲁迅《孔乙己》是一篇具有深刻思想和感人情感的短篇小说,通过酒肆里的故事反映社会的残酷和人性的悲哀; 故事中的孔乙己是一个身世不明、生活贫困的酒鬼,他虽然饱受百般屈辱,但却有着坚定的自尊和对人性的信仰;他并不在乎别人对他的嘲讽和侮辱,而是坚持自己

    2024年02月02日
    浏览(20)
  • 重生前端之我在javascript敲代码(03-数组)

    一. 数组(重点) 思考:如何保存一个班级的所有学生的姓名? 回答:一种方法利用前面学习过的知识,则每一条信息都需要一个变量去保存,缺点是这样做很麻烦,而且容易出错,又不合理;另一种方法就是利用数组。 概念:数组是存储一系列值的变量集合,可以存储多

    2024年04月11日
    浏览(37)
  • 重生之我在CSDN学习spark

    1.什么是spark 在官网上对于spark的解释是以下一段话 意思是Apache SparkTM 是一个多语言引擎,用于在单节点机器或集群上执行数据工程、数据科学和机器学习。 Spark是一种快速、通用、可扩展的大数据分析引擎,2009年诞生于加州大学伯克利分校AMPLab,2010年开源,2013年6月成为

    2024年03月22日
    浏览(31)
  • 重生之我测阿里云U1实例(通用算力型实例)

    参与ECSU实例评测,申请免费体验机会:https://developer.aliyun.com/mission/review/ecsu 参与ECSU实例评测,申请免费体验机会:https://developer.aliyun.com/mission/review/ecsu 参与ECSU实例评测,申请免费体验机会:https://developer.aliyun.com/mission/review/ecsu 视频演示地址点我直达Bilibili 视频演示地址点

    2024年02月08日
    浏览(39)
  • 剑指29.顺时针打印矩阵 31 栈的压入,弹出序列 03 数组中的重复数字 53缺失的数字 04二维数组中的查找

    回字形 思路:pushed数组里遍历进栈,遍历时候,先进栈,再判断栈顶是否和poped序列的当前指向的是否一样,一样就pop,直到不一样为止,然后继续遍历进栈。然后再判断栈里面剩余的和poped序列指向的一不一样,一样,就把栈里面的pop,直到栈为空,只要有一个不一样,就

    2024年02月16日
    浏览(29)
  • 力扣数组类题目--41缺失的第一个正数

    41 缺失的第一个正数 给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案 。 示例 1: 输入:nums = [1,2,0] 输出:3 示例 2: 输入:nums = [3,4,-1,1] 输出:2 示例 3: 输入:nums = [7,8,9,11,12

    2024年02月11日
    浏览(26)
  • Practices11|41. 缺失的第一个正数(数组)、73. 矩阵置零(矩阵)

    1.题目: 给你一个未排序的整数数组  nums  ,请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为  O(n)  并且只使用常数级别额外空间的解决方案。 示例 1: 示例 2: 示例 3: 提示: 1 = nums.length = 5 * 105 -231 = nums[i] = 231 - 1 2.思路: 如果本题没有额外的时空复杂

    2024年02月12日
    浏览(26)
  • 【题解】二分查找-I、二维数组中的查找

    题目链接:二分查找-I 解题思路:遍历 代码如下: 这种解题思路很明显没有很好的利用题目中强调的数组是升序的,既然是升序,那肯定前半部分偏小,后半部分偏大,如果我们能知道应该去前半部分还是后半部分寻找target,效率相对就提升很多了,于是我们有了下面的分

    2024年02月14日
    浏览(30)
  • JavaSE基础50题:25. 查找数组中指定元素(顺序查找)

    给定一个数组,再给定一个元素,找出该元素在数组中的位置。 【概述】 一个一个找,比较慢。 想要快一点的方法,可以使用二分查找,在后续《JavaSE基础50题》专栏中27题中详细讲解。 【代码】 【输出结果】

    2024年02月04日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包