【C语言】每日一题(找到所有数组中消失的数字)

news/2024/12/29 3:24:49/

找到所有数组中消失的数字,链接奉上。
在这里插入图片描述

这里简单说一下,因为还没有接触到动态内存,数据结构,所以知识有限,也是尽力而为,结合题库的评论区找到了适合我的解法,以后有机会,会补上各种解法

方法

  • 暴力循环
  • 排序+分情况讨论

暴力循环

暴力循环依旧是最容易想到的,但是越容易想到的往往更耗费时间,也就意味着更容易超出时间界限。
思路:

双重for循环,外部控制1~n个数,内部遍历nums数组,两两比较记录没有出现的数字,即为消失的数字

代码实现:

static int arr[99999];//创建数组
int* finddisappearednumbers(int* nums, int numssize, int* returnsize)
{int count = 0;//计数器int n = 0;for (int j = 1; j <= numssize; j++){count = 0;//每次进入要重置for (int i = 0; i < numssize; i++){if (j == nums[i]){count++;break;}}if (count == 0)//为0说明未出现arr[n++] = j;}*returnsize = n;return arr;
}

排序+分情况讨论

思路:

排序是为了让数组有序,更好的进行操作
那么分情况讨论是怎么一回事
1~n设为循环变量i,进行遍历,
left=0设为下标,从0开始根据情况left++
再将nums[left]与i比较
i==nums[left]left++,因为会有重复的数字,比如1 2 2 2,这时,可以使用while循环
i!=nums[left]时,将i放入结果数组
注意:
数组有时会出现n(也就是numssize)大于当前数组最大值(nums[numssize-1])的情况,也就是类似: 1 2 2 2的情况,所以while中的left会超出界限,这时left==numssize,我们将剩下的for循环中未开始的i依次赋值给结果数组

代码实现:

int cmp(int* a, int* b)
{return *a - *b;
}
int* findDisappearedNumbers(int* nums, int numsSize, int* returnSize){qsort(nums,numsSize,sizeof(int),cmp);int* res=malloc(sizeof(int) * numsSize);//结果数组,result*returnSize=0;int left=0;for(int i=1;i<=numsSize;i++){if(left<numsSize&&i!=nums[left])//注意:left要放前边,防止短路发生{res[(*returnSize)++]=i;//*returnsize随着结果数组的增加而增加,//最后返回的就是数组大小}if(left==numsSize){res[(*returnSize)++]=i;}//while要在最后进行,因为在前边会改变left//影响两个if的判断while(left<numsSize&&i==nums[left]){left++;}}return res;
}

欢迎大家纠错与讨论。


http://www.ppmy.cn/news/1042339.html

相关文章

Vue2集成Echarts实现可视化图表

一、依赖配置 1、引入echarts相关依赖 也可以卸载原有的&#xff0c;重新安装 卸载&#xff1a;npm uninstall echarts --save 安装&#xff1a;npm install echarts4.8.0 --save 引入水球图形依赖 npm install echarts-liquidfill2.0.2 --save 水球图可参考文档&#xff1…

【论文综述】Transformer 综述

中国科学院、东南大学等联合发表最新的视觉 Transformer 综述_中科院AI算法工程师的博客-CSDN博客 Transformer综述大全&#xff08;1&#xff09;【A Survey of Visual Transformers】_香博士的博客-CSDN博客 Transformer综述大全&#xff08;2&#xff09;【A Survey of Vi…

程序员如何进行时间管理

时间管理对于程序员来说非常重要&#xff0c;以下是一些建议来帮助程序员进行时间管理&#xff1a; 1. 设置优先级&#xff1a;确定工作任务的优先级&#xff0c;将重要和紧急的任务放在首要位置。可以使用工作管理工具或任务列表来追踪和安排任务。 2. 分解任务&#xff1a;…

scala Product

scala Product 1. 由来 Product是Scala中的一个特质&#xff08;trait&#xff09;&#xff0c;它用于表示具有固定数量元素的元组&#xff08;Tuple&#xff09;和案例类&#xff08;Case Class&#xff09;。它提供了一些通用方法&#xff0c;用于访问和操作这些元素。 2.…

08-信息收集-架构、搭建、WAF等

信息收集-架构、搭建、WAF等 信息收集-架构、搭建、WAF等一、前言说明二、CMS识别技术三、源码获取技术四、架构信息获取技术五、站点搭建分析1、搭建习惯-目录型站点2、搭建习惯-端口类站点3、搭建习惯-子域名站点4、搭建习惯-类似域名站点5、搭建习惯-旁注&#xff0c;c段站点…

“深入探究JVM内部机制:如何实现Java程序的运行环境?“

标题&#xff1a;深入探究JVM内部机制&#xff1a;如何实现Java程序的运行环境&#xff1f; 摘要&#xff1a;本文将深入探究Java虚拟机&#xff08;JVM&#xff09;的内部机制&#xff0c;重点讨论JVM如何实现Java程序的运行环境。我们将从JVM的结构、类加载、内存管理、垃圾…

剑指Offer39.数组中出现次数超过一半的数字 C++

1、题目描述 数组中有一个数字出现的次数超过数组长度的一半&#xff0c;请找出这个数字。 你可以假设数组是非空的&#xff0c;并且给定的数组总是存在多数元素。 示例 1: 输入: [1, 2, 3, 2, 2, 2, 5, 4, 2] 输出: 2 2、VS2019上运行 使用哈希表的方法 #include <iost…

使用 Spring Security LDAP 实现身份验证

如果你曾经在生产级应用程序中实现过登录功能&#xff0c;你一定听说过 LDAP 身份验证。 LDAP 可用于任何类型的分层目录信息&#xff0c;LDAP 最流行的用途是存储组织数据。 举个例子&#xff0c;比如说你们公司一个典型的组织结构&#xff0c;那么一般都有董事、经理、监事…