【数据结构】习题之消失的数字和轮转数组

 👑个人主页:啊Q闻       

🎇收录专栏:《数据结构》           

 🎉前路漫漫亦灿灿

前言 

消失的数字这道题目我会和大家分享三种思路。

还有一道题目是轮转数组,,也会分享三种思路,大家感兴趣就看一看吧。

一.消失的数字 

题目为:

思路:

思路一:因为该题目是从一个有序数组中找出一个消失的数字,所以我们可以先排序,然后一个个查找。

时间复杂度分析:该种方法的查找时间复杂度与所用排序方法有关,如果用冒泡排序,时间复杂度为: O(N^2),如果用qsort排序,时间复杂度为:O(N*logN)。


思路二:设置一个变量x先于0~n中所有值异或,然后再和数组中所有值异或,相同的值异或结果为0,所以剩余的值就是消失的数字。

时间复杂度分析:0~n要遍历n+1个值,然后再与数组中的n个值遍历。所以时间复杂度为n+(n+1)=2n+1,O(N)。


思路三:计算0~n个数的累加和,然后依次减去数组中的值。

时间复杂度分析:该方法首先计算0~n的累加和时,要遍历,然后减去数组中的值时,也要遍历。所以时间复杂度为:n+1+n=2n+1,O(N)。

代码实现:

 思路二实现:

int missingNumber(int* nums, int numsSize)
{int n=numsSize;int x=0;for(int i=0;i<=n;i++)//先将x和0~n中所有数字进行异或{x^=i;}for(int j=0;j<n;j++)//再将上述与数组中所有数字进行异或{x^=nums[j];}return x;
}

过程分析:

示例数组:nums={3,0,1} 

第一个循环中:x=0^0^1^2^3

第二个循环中:x=0^0^1^2^3^3^0^1==2

注意:利用位运算异或,相同数字异或结果为0,0与任何数字异或都为数字本身。

思路三实现:

int missingNumber(int* nums, int numsSize){int n=numsSize;int ret=n*(n+1)/2;//等差0~n的累积和for(int i=0;i<n;i++){ret-=nums[i];}return ret;
}

二.轮转数组 

题目为:

思路:

思路一:暴力求解,每次挪动旋转一个,右移k次。

时间复杂度分析:最坏情况:当k=N-1时,即相当于数组要全部移动n-1次,时间复杂度为:N*(N-1)=N^2-N,即O(N^2 )。


思路二:三段逆置,即将数组分为两部分,每部分分别逆置,然后整体逆置。

 示例:输入:nums=[1,2,3,4,5,6,7],k=3

            输出:[5,6,7,1,2,3,4]

    前n-k个逆置 4,3,2,1,5 ,6,7

       后k个逆置 4,3,2,1,7,6,5

         整体逆置 5,6,7,1,2,3,4

时间复杂度分析:看整体的移动情况:N+N=2N,即时间复杂度为:O(N)


思路三:利用memcpy实现

 示例:输入:nums=[1,2,3,4,5,6,7],k=3

            输出:[5,6,7,1,2,3,4]

            1,2,3,4,5,6,7

            5,6,7,1,2,3,4

时间复杂度分析:O(N)

代码实现:

 思路二实现:

void Reverse(int *nums,int left,int right)
{while(left<right)//详解一{int tmp=0;tmp=nums[left];nums[left]=nums[right];nums[right]=tmp;++left;--right;}
}
void rotate(int* nums, int numsSize, int k) {k%=numsSize;//当轮转数组大于数组长度时,其相当于有数组长度未移动Reverse(nums,0,numsSize-k-1);Reverse(nums,numsSize-k,numsSize-1);Reverse(nums,0,numsSize-1);}

思路二详解:

详解一: 

思路三实现:

void rotate(int* nums, int numsSize, int k) {k%=numsSize;int n=numsSize;int tmp[n];memcpy(tmp,nums+n-k,sizeof(int)*k);memcpy(tmp+k,nums,sizeof(int)*(n-k));memcpy(nums,tmp,sizeof(int)*n);//因为是反转nums数组,所以最后要返回去}

思路三详解:

 感谢阅读,如果对你有用的话,三连支持一下吧😊

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

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

相关文章

常见的垃圾回收器(下)

文章目录 G1ShenandoahZGC 常见垃圾回收期&#xff08;上&#xff09; G1 参数1&#xff1a; -XX:UseG1GC 打开G1的开关&#xff0c;JDK9之后默认不需要打开 参数2&#xff1a;-XX:MaxGCPauseMillis毫秒值 最大暂停的时间 回收年代和算法 ● 年轻代老年代 ● 复制算法 优点…

Methoxy PEG Propionic acid具有良好的亲水性和分子量可控性

【试剂详情】 英文名称 mPEG-PA&#xff0c;mPEG-Propionic acid&#xff0c; Methoxy PEG PA&#xff0c; Methoxy PEG Propionic acid 中文名称 聚乙二醇单甲醚丙酸&#xff0c; 甲氧基-聚乙二醇-丙酸 外观性状 由分子量决定&#xff0c;固体或者液体 分子量 400&…

如何提高直线模组的技术水平?

在工业制造业中&#xff0c;不管我们使用任何机械产品&#xff0c;都有一个共同的出发点&#xff0c;就是能用先进的技术突破其产品的性能及使用性。那么直线模组究竟是用什么技术突破其产品的使用性的呢&#xff1f; 1、优化机械设计&#xff1a;设计过程中应充分考虑模组的结…

JetBrains2024来袭

JetBrains2024来袭&#xff0c;激活包含在内的编程IDE&#xff0c;其中AppCode已下架&#xff0c;Aqua&#xff0c;RustRover不支持本地激活需要关联帐号。 Tap&#xff1a;激活稳定可靠&#xff0c;支持Windows&#xff0c;macOS&#xff0c;Linux客户端。

C语言【指针】

1. 基本语法 1.1 指针变量的定义和使用(重点) 指针是一种数据类型&#xff0c;指针变量指向谁 就把谁的地址赋值给指针变量 1.2 通过指针间接修改变量的值 指针变量指向谁 就把谁的地址赋值给指针变量 可以通过 *指针变量 间接修改变量的值 1.3 const修饰的指针变量 语法…

全视通院内导航助力“医”路畅通,让您就医不迷路

“这个科室怎么走&#xff1f;”“CT检查在哪里做&#xff1f;”“请问抽血在哪里&#xff1f;”…… 这是患者在赴院就诊时常会发出的疑问&#xff0c;医院导诊台及其他区域的工作人员对此应接不暇&#xff0c;繁忙时段更容易顾此失彼&#xff0c;不仅自身工作负担大&#xf…

stable diffusion基本原理

diffusion model latent diffusion &#xff1a;先对图片降维&#xff0c;然后在降维空间做diffusion&#xff1b;stable diffusion即基于此方法实现的&#xff0c;因此计算量很小&#xff1b; 共用降噪网络U-Net&#xff1a;输入noisy imagestep&#xff0c;告诉网络当前的噪声…

scipy.signal.cwt, pywt.cwt, ssq_cwt 使用记录

scipy.signal.cwt 该代码中widths以及freq计算公式来源于scipy.signal.morlet2函数官方案例 from scipy.signal import morlet, morlet2 from scipy import signal import matplotlib.pyplot as pltsignal_length 2000 fs 1000# 生成信号数据 time np.arange(0, signal_leng…

全新付费进群系统源码 带定位完整版 附教程

搭建教程 Nginx1.2 PHP5.6-7.2均可 最好是7.2 第一步上传文件程序到网站根目录解压 第二步导入数据库&#xff08;dkewl.sql&#xff09; 第三步修改/config/database.php里面的数据库地址 第四步修改/config/extra/ip.php里面的域名 第四步设置伪静态thinkphp 总后台账…

MySQL死锁与死锁检测

一、什么是MySQL死锁 MySQL中死锁是指两个或多个事务在互相等待对方释放资源&#xff0c;导致无法继续执行的情况。 MySQL系统中当两个或多个事务在并发执行时&#xff0c;就可能会遇到每项事务都持有某些资源同时又请求其他事务持有的资源&#xff0c;从而形成事务之间循环等…

Nginx第2篇-HTTPS配置教程

背景 我最近做个项目要上线&#xff0c;接口部署到服务器&#xff0c;总不能给别人个ip地址加端口吧&#xff0c;而且小程序上线要有接口不能是ip和http协议&#xff0c;必须是https协议。这里记录下使用Nginx配置HTTPS的过程&#xff0c;主要包含以下三部分。 申请域名SSL证…

切换plesk面板语言

近期购入了Hostease的Windows虚拟主机产品&#xff0c;由于进入他们主机Plesk面板后查看全都是英文的&#xff0c;对于英文也不是很懂&#xff0c;尤其是像这种专业 词汇的更不明白。因此这边咨询了Hostease的技术支持&#xff0c;寻求帮助了解到可以Plesk面板可以切换语言的&a…

EDI是什么:EDI系统功能介绍

EDI全称Electronic Data Interchange&#xff0c;中文名称是电子数据交换&#xff0c;也被称为“无纸化贸易”。EDI实现企业间&#xff08;B2B&#xff09;自动化通信&#xff0c;帮助贸易伙伴和组织完成更多的工作、加快物流时间并消除人为错误。 目前国内企业实现EDI通信大多…

麒麟 V10 离线 安装 k8s 和kuboard

目录 安装文件准备 主机准备 主机配置 修改主机名&#xff08;三个节点分别执行&#xff09; 配置hosts&#xff08;所有节点&#xff09; 关闭防火墙、selinux、swap、dnsmasq(所有节点) 安装依赖包&#xff08;所有节点&#xff09; 系统参数设置(所有节点) 时间同步…

MYSQL的COMPACT行格式讲解

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是小周同志&#xff0c;25届双非校招生Java选手&#xff0c;很高兴认识大家 &#x1f4d5;学习出处&#xff1a;本文是学自小林coding (xiaolincoding.com) 网站的MYSQL图解篇 &#x1f525;如果感觉博主的文章还不错的…

软考130-上午题-【软件工程】-系统维护

一、系统维护概述 软件维护是软件生命周期中的最后一个阶段&#xff0c;处于系统投入生产性运行以后的时期中&#xff0c;因此不属于系统开发过程。 软件维护是在软件已经交付使用之后为了改正错误或满足新的需求而修改软件的过程&#xff0c;即软件在交付使用后对软件所做的一…

钉钉对接T+生成总账凭证

客户介绍&#xff1a; 某餐饮连锁企业是一个专注于特色风味徽州菜的餐饮品牌&#xff0c;总部位于杭州市&#xff0c;其推出的各式特色徽菜深受市场的好评&#xff0c;在杭州本地的餐饮市场中有着很强的竞争力。公司ERP使用用友T系统&#xff0c;通过钉钉管理员工费用报销流程…

成功创新的四个向量——创新钻石模型及其在产品创新中的应用

一、摘要 在今天的快速变化的市场环境中&#xff0c;创新已经成为企业生存和发展的关键。然而&#xff0c;成功创新并非易事&#xff0c;需要企业在多个方面做出努力。创新钻石模型为我们提供了一个理解成功创新的框架&#xff0c;它包括四个关键向量&#xff1a;产品创新和聚…

恶意不息上线时间/游戏价格/配置要求/加速器推荐

Moon Studios 联合创始人、技术总监 Gennadiy Korol 解释说&#xff1a;我们的目标是让战斗更有身临其境感一些、更加专注一些。而不是屏幕上的信息量多到爆炸&#xff0c;让人看不过来。我们要让玩家真正感受到角色的每一个动作。战斗是贴近的&#xff0c;是专注的。不是屏幕上…

基于逐笔数据合成高频订单簿:DolphinDB 订单簿引擎

订单簿是交易市场上买卖双方正在报价的不同价格的列表。订单簿快照反应了特定时刻市场上的交易意图&#xff0c;比如交易活跃的证券标的往往有着密集的订单簿。订单簿快照对量化金融的交易策略、风险管理和市场分析等方面都具有重要意义。 通常交易所可以提供实时和历史的行情…