当前位置: 首页 > news >正文

【Leetcode】消失的数字 [C语言实现]

👻内容专栏:《Leetcode刷题专栏》

🐨本文概括: 面试17.04.消失的数字

🐼本文作者:花 碟

🐸发布时间:2023.4.10

目录

思想1:先排序再查找

思想2:异或运算

代码实现: 

思想3:等差数列求和相减

代码实现: 


 

点击跳转到Leetcode的OJ平台 17.04 消失的数字  

题目:

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

int missingNumber(int* nums, int numsSize);

示例1:

 示例2:

 分析:

1.数组中经过排列后是一串有序列的整数,只不过序列中缺失了一个整数,题目需要让你找出这个缺失的数字

2.时间复杂度要求允许在O(n)范围内

思想1:先排序再查找

首先,我们就可以想到将数组nums里的元素进行排序,然后进行依次查找,如果下一个数不是上一个数+1得到的,那么上一个数+1就是我们要找的消失的数字。这题,按道理可以这么去写。

但是,观察各类常见的排序算法的时间复杂度详解图,最坏情况达不到我们该题要求的时间复杂度之内,在这里我们去运用排序,并不太合适。

各类排序时间复杂度对比
类别排序方法时间复杂度
平均情况最好情况最坏情况
插入排序直接插入O(n²)O(n)O(n²)
希尔排序O(n¹·³)O(n)O(n²)
选择排序直接排序O(n²)O(n²)O(n²)
堆排序O(nlog₂n)O(nlog₂n)O(nlog₂n)
交换排序冒泡排序O(n²)O(n)O(n²)
快速排序O(nlog₂n)O(nlog₂n)O(n²)
归并排序O(nlog₂n)O(nlog₂n)O(nlog₂n)
基数排序O(d(r+n))O(d(n+rd))O(d(r+n))
注:基数排序的复杂度中,r代表关键字的基数,d代表长度,n代表关键字的个数

 接下来,我们寻找其他方法击破此题。

思想2:异或运算

我们利用异或运算的规则(相同为0,相异为1),我可以先让一个变量x,初始值为0,与数组nums中numSize个元素进行异或运算,最后再与0 ~ numSize循环遍历的值进行异或,就能够得到是一个落单的数字,也就是我们最后要找的“消失的数字

代码实现: 

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

思想3:等差数列求和相减

我们可以写一个循环计算0~numSize所有数字之和,0到numSize个数字本质也是一个等差数列,也可以使用等差数列求和公式,得出一个sum1值。继续求出nums数组中所有整数之和,得出一个sum2值。sum1减去sum2得到的数字就是“消失的数字

代码实现: 

int missingNumber(int* nums, int numsSize){int i = 0;int sum1 = (1 + numsSize)*numsSize / 2;int sum2 = 0;for(i = 0;i < numsSize;i++){sum2 += nums[i];}return sum1 - sum2;
}


🤗🤗 好啦,本篇文章的创作就到此为止啦,如有不当,还请私信我纠正哦~

http://www.lryc.cn/news/59597.html

相关文章:

  • SpringBoot接口 - 如何实现接口限流之单实例
  • 【花雕学AI】深度挖掘ChatGPT角色扮演的一个案例—CHARACTER play : 莎士比亚
  • 腾讯云物联网开发平台 LoRaWAN 透传接入 更新版
  • 4.6--计算机网络之TCP篇之TCP的基本认识--(复习+深入)---好好沉淀,加油呀
  • 一文吃透Elasticsearch
  • CPU占用率高怎么办?正确解决方法在这里!
  • ChatGPT实现用C语言写一个学生成绩管理系统
  • Swagger文档注释
  • pdf怎么转换ppt格式,两个方法转换
  • 深度学习编译器相关的优秀论文合集-附下载地址
  • vue全局使用svg
  • 每天一点C++——杂记
  • Document Imaging SDK 11.6 for .NET Crack
  • 数据挖掘(3.1)--频繁项集挖掘方法
  • 2023年信息安全推荐证书
  • 基于ArcGIS、ENVI、InVEST、FRAGSTATS等多技术融合提升环境、生态、水文、土地、土壤、农业、大气等领域应用
  • 基于ZC序列的帧同步
  • 配置NFS服务器-debian
  • 正点原子STEMWIN死机
  • PMP考试中的固定答题套路
  • STM32 学习笔记_2 下载,GPIO 介绍
  • Centos搭建k8s
  • Flutter Flex(Row Column,Expanded, Stack) 组件
  • 《深入探讨:AI在绘画领域的应用与生成对抗网络》
  • al文章生成-文章生成工具
  • 【云原生之Docker实战】使用docker部署webterminal堡垒机
  • 《低代码PaaS驱动集团企业数字化创新白皮书》-IDC观点
  • LoRA 指南之 LyCORIS 模型使用
  • [C#]IDisposable
  • ROS开发之如何使用RPLidar A1二维激光雷达?