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

news2024/12/30 2:53:03

 👑个人主页:啊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.coloradmin.cn/o/1602047.html

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

相关文章

P1278 单词游戏 简单搜索+玄学优化

单词游戏 传送门 题目描述 Io 和 Ao 在玩一个单词游戏。 他们轮流说出一个仅包含元音字母的单词&#xff0c;并且后一个单词的第一个字母必须与前一个单词的最后一个字母一致。 游戏可以从任何一个单词开始。 任何单词禁止说两遍&#xff0c;游戏中只能使用给定词典中含有…

智慧电网数据可视化运维云平台解决方案

智慧电力概述 智慧电力是通过采用先进的大数据、云计算、物联网、边缘计算等技术&#xff0c;实现生产信息与管理信息的智慧&#xff0c;实现人、技术、经营目标和管理方法的集成&#xff0c;是企业管理思想的一个新突破。智慧电厂建设具备智能化、一体化、可观测、可互动、自…

【新知实验室 - TRTC 实践】音视频互动 Demo、即时通信 IM 服务搭建

一、TRTC 初识 TRTC 是什么 TRTC&#xff08;Tencent RTC&#xff09;腾讯实时音视频&#xff0c;源自于 QQ 音视频团队&#xff0c;是基于 QQ 音视频多年来的音视频技术积累&#xff0c;位于腾讯云的 RTC 云服务。TRTC 支持腾讯会议、企业微信直播、微信视频号、腾讯云课堂、…

虚拟机vm桥接模式linux(centos,ubuntu)联网

台式机网线 查看宿主机网络 编辑虚拟机—>虚拟网络编辑器–>更改设置 选择&#xff0c;确定 进入linux系统 输入ip addr找到自己的网卡 我的是eno16777736 centos&#xff1a; 编辑 HWADDR"00:0C:29:54:CE:B8" TYPE"Ethernet" BOOTPROTO"…

Python处理海量大数据库之fugue使用详解

概要 在大数据时代,处理海量数据是一项重要的任务。Python作为一种流行的编程语言,有许多优秀的库和工具可以帮助开发者处理大规模数据。其中,Fugue库是一个强大的工具,可以帮助开发者构建分布式数据处理流水线。本文将介绍Fugue库的安装方法、特性、基本功能、高级功能、…

Elasticsearch下载安装 以及Reindex(数据迁移)

部署Elasticsearch集群 这里介绍使用的是Elasticsearch 7.6.1的版本&#xff0c;配置两台服务器&#xff0c;一台部署主节点&#xff0c;一台部署两个从节点。 下载地址&#xff1a;https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.16.2-linux-x86_64…

服务器数据恢复—ext3文件系统下raid5数据恢复案例

服务器数据恢复环境&故障情况&#xff1a; 某企业光纤存储上有一组由16块硬盘组建的raid5阵列。管理员发现该光纤存储上的卷无法挂载&#xff0c;经过检查发现raid5阵列中有2块硬盘离线&#xff0c;于是联系我们数据恢复中心要求数据恢复工程师到现场恢复服务器存储上的数据…

PyQt5 快速入门

PyQt5 简介和开发环境搭建 简介 PyQt是一个GUI小部件工具包。 它是Qt的Python接口&#xff0c; Qt是最强大&#xff0c;最受欢迎的跨平台GUI库之一。 PyQt由RiverBank Computing Ltd.开发。最新版本的PyQt可从其官方网站下载 - riverbankcomputing.com PyQt API是一组包含大…

每天学点儿Python(6) -- 列表和枚举

列表是Python中内置的可变序列&#xff0c;类使用C/C中的数组&#xff0c;使用 [ ] 定义列表&#xff0c;列表中的元素与元素之间用英文逗号&#xff08; , &#xff09;分隔&#xff0c; 但是Python中列表可以存储任意类型的数据&#xff0c;且可以混存&#xff08;即类型可以…

2024能源动力、机械自动化与航天航空技术国际学术会议(ICEPMAT2024)

2024能源动力、机械自动化与航天航空技术国际学术会议(ICEPMAT2024) 会议简介 能源动力、机械自动化和航空航天技术国际学术会议&#xff08;ICEPMAT2024&#xff09;将于2024年在北京举行。会议将探讨能源动力、机械自动化、航空航天技术领域的新研究热点、核心技术和发展趋…

软件行业中的蓝海领域有哪些?

什么是蓝海&#xff1f; 蓝海&#xff0c;指的是未知的市场空间。这个概念相对于“红海”而言&#xff0c;红海则是指已知的市场空间。 企业要启动和保持获利性增长&#xff0c;就必须超越产业竞争&#xff0c;开创全新市场&#xff0c;这其中包括两块&#xff1a;一块是突破…

2024五一杯数学建模C题思路分析

文章目录 1 赛题思路2 比赛日期和时间3 组织机构4 建模常见问题类型4.1 分类问题4.2 优化问题4.3 预测问题4.4 评价问题 5 建模资料 1 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 2 比赛日期和时间 报名截止时间&#xff1a;2024…

【YOLOv8改进[损失函数]】使用结合InnerIoU和Focaler的各种损失函数助力YOLOv8更优秀

目录 一 回归损失函数&#xff08;Bounding Box Regression Loss&#xff09; 1 Inner-IoU 2 Focaler-IoU&#xff1a;更聚焦的IoU损失 二 改进YOLOv8的损失函数 1 总体修改 ① ultralytics/utils/metrics.py文件 ② ultralytics/utils/loss.py文件 ③ ultralytics/uti…

Vue项目管理器创建项目

黑马程序员JavaWeb开发教程 文章目录 1、创建新项目2、详情3、预设4、功能5、配置6、是否保存为预设模板7、正在创建项目8、创建完成 1、创建新项目 2、详情 3、预设 选择手动&#xff0c;点击下一步 4、功能 只需要额外选择一项–Router 即可&#xff0c;其余的保持默认&a…

C语言【指针】

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

TR转发路由器上手实测-助你轻松搭建企业网

TR转发路由器上手实测-助你轻松搭建企业网 基础概念实测路由图准备资源网络规划杭州地域北京地域 云服务器ECS云企业网免费试用TR创建云企业网创建TR转发路由器创建TR同地域连接创建TR跨地域连接 网络连通性测试释放资源释放云服务器ECS释放TR 体验感受 在进行TR转发路由器上手…

POST 为什么会发送两次请求?

本文目录 同源策略 什么是同源策略 CORS 简单请求 预检请求 附带身份凭证的请求与通配符 完整的请求流程图 总结 前言 最近博主在字节面试中遇到这样一个面试题&#xff0c;这个问题也是前端面试的高频问题&#xff0c;因为在前端开发的日常开发中我们总是会与post请求…

mysql搭建主从

mysql搭建主从: 1:拉取mysql镜像 docker pull mysql2:创建主从对应目录 3:建立一个简易的mysql docker run -it --name mytest -e MYSQL_ROOT_PASSWORD123 -d mysql4:进入这个简易的mysql;从中获取my.cnf文件 docker exec -it mytest bash5:从容器中将my.cnf拷贝到 /3306/c…

WIFI/BT中蓝牙的硬件资源是如何调度的 UART和PCM接口传输的是什么信号

安卓或IOS手机中&#xff0c;wifi/bt中的蓝牙是如何调度硬件资源的&#xff0c;尤其是UART和PCM是如何分配的。M.2 wifi/bt模块或其他形式的模块中&#xff0c;蓝牙是如何调度硬件资源的&#xff0c;尤其是UART和PCM是如何分配的。今天我们就图文并茂的解决这个问题。 蓝牙文件…

CSS display属性

目录 概述&#xff1a; 设置display示例&#xff1a; none&#xff1a; block&#xff1a; inline&#xff1a; inline-block &#xff1a; 概述&#xff1a; 在CSS中我们可以使用display属性来控制元素的布局&#xff0c;我们可以通过display来设置元素的类型。 在不设置…