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

 👑个人主页:啊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.hqwc.cn/news/615598.html

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

相关文章

数据结构----链表算法题目

1.移除链表的元素 这个题目我们有多种解决方案 &#xff08;1&#xff09;思路A&#xff1a;遍历整串数据&#xff0c;如果是我们想要删除的数据&#xff0c;就让这个数字后面的数字全部向前移动直到整传数字全部遍历完成&#xff1b;这个方法的时间复杂度是N的平方&#xff…

Harbor镜像仓库报错“Harbor被设置为只读模式,在此模式下,不能删除仓库、标签及推送镜像。”

由于Harbor镜像仓库空间不足&#xff0c;今天扩容的磁盘空间&#xff0c;扩容前做了垃圾清理操作&#xff0c;然后直接停止了服务。估计清理任务没完成&#xff0c;导致服务启动后Harbor被设置为只读模式&#xff0c;无法使用。下面是解决方法。 1、报错信息&#xff1a; “Ha…

redis 数据迁移到rds2214(TongRDS-2.2.1.3.Load版 by lqw)

​ 文章目录 一.备份redis文件 vi redis.conf &#xff0c;看看有没有这两行设置&#xff0c;有的话改成跟下面的一致&#xff1a; appendonly yes appendfilename “appendonly.aof” 之后连接redis客户端&#xff0c;输入INFO persistence&#xff0c;如图所示即为开启成功…

类和对象(拷贝构造函数)

目录 拷贝构造函数 特征 结论&#xff1a; 拷贝构造函数 拷贝构造函数&#xff1a;只有单个形参&#xff0c;该形参是对本类类型对象的引用(一般常用const修饰)&#xff0c;在用已存 在的类类型对象创建新对象时由编译器自动调用。 特征 拷贝构造函数也是特殊的成员函数&…

亚马逊跨境电商崛起,武汉星起航引领新手卖家抢占全球市场

随着全球化的深入推进&#xff0c;跨境电商已成为连接世界贸易的重要桥梁。作为全球最大的电商平台之一&#xff0c;亚马逊正以其强大的物流网络和庞大的用户基础&#xff0c;引领跨境电商业务迅速崛起。业内专家分析指出&#xff0c;亚马逊跨境电商市场有望在未来几年内继续保…

Java+saas模式 智慧校园系统源码Java Android +MySQL+ IDEA 多校运营数字化校园云平台源码

Javasaas模式 智慧校园系统源码Java Android MySQL IDEA 多校运营数字化校园云平台源码 智慧校园即智慧化的校园&#xff0c;也指按智慧化标准进行的校园建设&#xff0c;按标准《智慧校园总体框架》中对智慧校园的标准定义是&#xff1a;物理空间和信息空间的有机衔接&#…

《黑马点评》Redis高并发项目实战笔记(上)P1~P43

P1 Redis企业实战课程介绍 P2 短信登录 导入黑马点评项目 首先在数据库连接下新建一个数据库hmdp&#xff0c;然后右键hmdp下的表&#xff0c;选择运行SQL文件&#xff0c;然后指定运行文件hmdp.sql即可&#xff08;建议MySQL的版本在5.7及以上&#xff09;&#xff1a; 下面这…

顺序表和链表的8道算法题

移除元素 题目连接放这了https://leetcode.cn/problems/remove-element/ 思路一 创建一个新数组&#xff1a;首先遍历原数组的所有数据&#xff0c;把不等于val的值直接放在新数组里&#xff0c;然后返回新数组的长度。由于这个思路不符合题目的要求&#xff0c;所以我们不采…

基于Springboot+Vue的Java项目-旅游网站系统(附演示视频+源码+LW)

大家好&#xff01;我是程序员一帆&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &am…

Redis中的集群(八)

集群 设置从节点 向一个节点发送命令: CLUSTER REPLICATE <node_id>可以让接收命令的节点成为node_id所指定节点的从节点&#xff0c;并开始对主节点进行复制: 1.接收到该命令的节点会首先会在自己的clusterState.nodes字典中找到node_id所对应节点的clusterNode结构,…

Web3 的社会影响:数字社会的新时代

随着科技的不断进步和创新&#xff0c;人类社会正逐步进入数字化时代的新阶段。Web3 技术作为数字社会的重要组成部分&#xff0c;正在以前所未有的方式重塑着我们的社会生活和交往方式。本文将探讨 Web3 技术对社会的影响&#xff0c;以及它所带来的数字社会的新时代。 1. Web…

ClickHouse--16--普通函数

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、日期函数1、时间或日期截取函数&#xff08;返回非日期&#xff09;2、时间或日期截取函数&#xff08;返回日期&#xff09;3、日期或时间日期生成函数 二、类…