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

 👑个人主页:啊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数组,所以最后要返回去
    
}

思路三详解:

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

照片和视频一键换脸,ROOP ROPE FaceFusion 中文版汉化版整合包下载安装

AI 人脸替换工具离线版下载地址&#xff1a;点击下载 AI 人脸替换工具离线版&#xff0c;将视频和图片的面孔替换为您选择的面孔。您只需要一张所需脸部的图像。没有数据集&#xff0c;就没有训练。工具包含 ROOP ROPE FaceFusion 三款人脸替换工具解压即用无需安装。 汉化整合…

【SpringBoot实战篇】注册接口

&#x1f495;&#x1f338;&#x1f340;开发接口的流程&#xff1a;明确需求 -》阅读接口文档-》思路分析-》开发-》测试&#x1f340;&#x1f338;&#x1f495; 开始前小知识-配置lombok&#x1f448;&#x1f340; lombok 在编译阶段,为实体类自动生成setter getter toSt…

教你将配置好的conda环境迁移到其它设备

文章目录 问题分析存在的方法环境要求方法步骤1. 下载conda pack2. 打包原环境3. 新设备还原环境4. 查看环境 问题分析 好不容易配置好的conda环境&#xff0c;要在另一个设备上运行&#xff0c;还要重新配置&#xff0c;好麻烦。 存在的方法 pip install -r requirement.txt …

一.表单校验

为什么要表单验证&#xff1f; 是为了减轻服务器的压力&#xff0c;让用户体验更好&#xff0c;保证输入的数据符合要求 常用的表单验证 日期格式 表单元素是否为空 用户名和密码 E-mail 地址 身份证号码 实现验证的思路 问题&#xff1a;当输入的表单数据不符合要求时&…

【在线服务,如何做网络加速】

为什么需要 ToC的业务&#xff0c;由于服务直接提供给用户使用&#xff0c;所以对服务的时延&#xff0c;平响要求比较高。如果因为跨地域的网络传输而造成较高时延&#xff0c;而用户有感的话体验不好&#xff0c;这个时候则需要做网络加速。 服务网络加速 开始之前 先考虑…

下单后快团团团长如何隐藏跟团人/团员/顾客的信息?

一、功能说明 有的团长不希望展示顾客跟单购买的信息&#xff0c;可以通过设置显示匿名头像微信名匿名隐藏。 二、具体操作步骤 在团购设置中点击“更多团购设置”&#xff0c;再点击“隐私设置”&#xff0c;在这里可以设置跟团人的展示信息。 注意1&#xff1a; 当跟团人显…

unity动画的关键帧添加event-同步语音

在iclone中做的语音嘴型动画&#xff0c;因是用下图自带的方式语音生成的动画&#xff0c;而不是用plugin(面捕live会连同语音一起导出)&#xff0c;所以导出来到Unity中&#xff0c;之后口型、动作、表情等没有声音。 我需要把原有的语音也重新在unity中加载上&#xff0c;原来…

【HTML】简单制作一个唱片动画效果

目录 前言 开始 HTML部分 CSS部分 效果图 总结 前言 无需多言&#xff0c;本文将详细介绍一段代码&#xff0c;具体内容如下&#xff1a; 开始 首先新建文件夹&#xff0c;创建两个文本文档&#xff0c;其中HTML的文件名改为[index.html]&#xff0c;CSS的…

python+playwright 学习-88 禁止加载图片等资源

前言 对于爬虫的小伙伴来说,有时候只需抓取页面的文本,不用加载图片,可以加快操作页面速度,那么我们可以设置禁止加载图片等资源。 禁止图片加载 根据url地址的后缀,图片资源后缀一般是png,jpg,jpeg,gif等格式。 from playwright.sync_api import sync_playwrightwith…

二叉树例题分享

文章目录 二叉树例题分享[235. 二叉搜索树的最近公共祖先](https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-search-tree/)[701. 二叉搜索树中的插入操作](https://leetcode.cn/problems/insert-into-a-binary-search-tree/)[108. 将有序数组转换为二叉搜索树…

Pixel 手机上连接提示受阻,无法上网-解决方法

命令行中输入 adb shell settings delete global captive_portal_https_urladb shell settings delete global captive_portal_http_url输入服务器信息 adb shell settings put global captive_portal_http_url http://connect.rom.miui.com/generate_204adb shell settings …

【Canvas与艺术】绘制方形斜纹生化危险Biohazard标志

【关键点】 绘制切角矩形、三角形比较费工&#xff0c;有时间可以把相关代码做成函数。 【成果图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <…

【Golang学习笔记】从零开始搭建一个Web框架(四)

文章目录 模板渲染静态文件支持HTML 模板渲染 错误恢复完结撒花~~ 前情提示&#xff1a; 【Golang学习笔记】从零开始搭建一个Web框架&#xff08;一&#xff09;-CSDN博客 【Golang学习笔记】从零开始搭建一个Web框架&#xff08;二&#xff09;-CSDN博客 【Golang学习笔记】从…

ChatGLM3初体验

mac本地化部署ChatGLM3 写在前面环境准备1. python环境2. 安装第三方依赖torch3.下载模型 代码准备1.clone代码 run效果 写在前面 建议直接去看官方文档 https://github.com/THUDM/ChatGLM3?tabreadme-ov-file 环境准备 1. python环境 python -V ## 3.11.42. 安装第三方依…

怎么提升公众号上限

正常可以申请多少个公众号&#xff1f;目前如果我们是企业主体的话&#xff08;包括个体户&#xff09;&#xff0c;申请公众号默认是可以申请2个公众号数量的。不过对于很多公司来说&#xff0c;2个公众号的数量肯定是远远不够用的&#xff0c;不同的产品不同品牌不同部门都可…

倍增法学习

这里i为开始下标&#xff0c;j是2的次幂

OSPF 开放式最短路径优先协议

目录 技术产生原因&#xff1a;因为RIP存在不足 OSPF优点&#xff1a; RIPV2和OSPFV2比较&#xff1a; 相同点&#xff1a; 不同点&#xff1a; OSPF的结构化部署 --- 区域划分 区域划分的主要目的&#xff1a; 区域边界路由器 --- ABR &#xff1a; 区域划分的要求&am…

医疗图像分割 | 基于Pyramid-Vision-Transformer算法实现医疗息肉分割

项目应用场景 面向医疗图像息肉分割场景&#xff0c;项目采用 Pytorch Pyramid-Vision-Transformer 深度学习算法来实现。 项目效果 项目细节 > 具体参见项目 README.md (1) 模型架构 (2) 项目依赖&#xff0c;包括 python 3.8、pytorch 1.7.1、torchvision 0.8.2(3) 下载…

2024 ICLR Oral 泛读调研(一、关于深度学习训练技术)

调研阅读要求&#xff1a; &#xff08;1&#xff09;先读要点&#xff1a;标题、摘要&#xff0c;随后直接跳到结论。 &#xff08;2&#xff09;实验结果&#xff1a;图、表、伪代码。 &#xff08;3&#xff09;对比角度&#xff1a;实验环境、数据集、测试方法、评估指标、…

嵌入式webrtc音视频多端p2p sfu传输方案

Webrtc在实时音视频中占据重要位置&#xff0c;在小型嵌入式设备上实现音视频数据的组合传输也越来越成为趋势&#xff0c;通过方便快捷的信令调度&#xff0c;可以实时相互拉取对等方的音视频流也可以通过sfu服务器实现转发。 我们在实践中采用物联网常用的mqtt协议来实现设备…