轮转数组【补充】

本章概述

  • 前情回顾
  • 方法一
  • 方法二
  • 总结
  • 彩蛋时刻!!!

前情回顾

点击:轮转数组。
在上面一章的《初阶数据结构【1】》里面,咱们通过轮转数组引出了算法复杂度的概念。咱们当时写的那个算法有点小问题,38个测试用例通过了37个测试用例。原因:超出时间限制。通过时间和空间复杂度计算,咱们写的那个算法时间复杂度O(n^2)空间复杂度O(1)。通过数学曲线图,我们发现这个算法的时间复杂度不是很好。平台显示咱们超出时间限制,那么咱就降低时间复杂度。下面展示一些个人的方法(供大家参考),大家也可以自己想个更好的算法。

方法一

  • 空间换取时间:之前的时间算法复杂度为O(n^2),超出时间限制。我们就降低时间复杂度,我们可以尝试降低到O(n)思路因为我们之前使用循环嵌套,所以时间复杂度就会出现n ^2。我们可以尝试不用循环嵌套,直接分离出一个循环。又或者,当我们一个循环不能够解决问题的时候,我们就用两个循环,而且这两个循环不是嵌套的,是等价的,时间复杂度为n+n=2n,O(n)。可以有效降低时间复杂度。我们可以再创建个新的数组,先把后(k)个元素都给转移到新数组的前面,再把剩下(numsSize-k)的元素转移到新数组的后面。最后,我们再把新数组的元素全部转移到之前的数组。如逻辑图所示:在这里插入图片描述
    我们理清了思路,那么我们就来写代码,进行代码展示:
void rotate(int* nums, int numsSize, int k) {int newarr[numsSize];for(int i=0;i<numsSize;i++){newarr[(k+i)%numsSize]=nums[i];}for(int i=0;i<numsSize;i++){nums[i]=newarr[i];}
}

结果运行图:在这里插入图片描述
这次的算法通过了。我们来计算一下这个程序的时间和空间复杂度,时间复杂度O(n),空间复杂度(因为我们创建个新数组,空间大小和老数组一样,所以元素个数为numsSize,即空间复杂度为n)O(n)。我们发现。时间复杂度降低了,空间复杂度升高了,只要空间占用的不是特离谱,就不会出现错误(因为本身空间我们就不怎么在乎)。这就是拿空间来换取时间方法

方法二

  • 内部自换思路:我们先把(numsSize-k)元素前后交换数值,再把后(k)元素前后交换数值最后,我们再整体把这个数组的前后元素交换数值注意:我们都是在同一个数组上交换数值。如图所示的逻辑图:在这里插入图片描述
    进行代码展示:
void reserve(int*num,int begin,int end)
{while(begin<end){int temp=num[begin];num[begin]=num[end];num[end]=temp;begin++;end--;}
}
void rotate(int* nums, int numsSize, int k) 
{reserve(nums,0,numsSize-k-1);reserve(nums,numsSize-k,numsSize-1);reserve(nums,0,numsSize-1);
}

结果运行图:在这里插入图片描述
我们有一个测试用例没通过,就是当这个数组的元素个数为1的时候,且还要轮转2次。那么,我们的reserve()函数里面的参数就会出现负值,就会越界访问下标值为负数的数组访问的方式咱们前面讲过)。这个函数本身没有什么问题,我们只需要处理一下k的取值就能解决问题——k%=numsSize;就能解决问题,进行代码展示:

void reserve(int*num,int begin,int end)
{while(begin<end){int temp=num[begin];num[begin]=num[end];num[end]=temp;begin++;end--;}
}
void rotate(int* nums, int numsSize, int k) 
{k%=numsSize;reserve(nums,0,numsSize-k-1);reserve(nums,numsSize-k,numsSize-1);reserve(nums,0,numsSize-1);
}

结果运行图:在这里插入图片描述
我们来算一下这个算法的时间和空间复杂度,时间复杂度O(n),空间复杂度O(1)。所以,到目前为止,这个算法是最好的算法。

总结

核心思想这个问题的核心思想就是,我们通过轮转的结果,我们可以整体思想去移动数组元素,不会像起始的那样,一个一个的轮转,最后还要加个循环嵌套,效率太低。我们直接一块一块的移动(就像方法2和方法3的思路),效率就会很多。解决一个问题可能会有很多的方法,这些方法中有的效率很高,有的效率就会很低。转移到算法题中,也是如此。当我们有时候需要增加空间复杂度的时候就要去增加,以降低时间复杂度。

彩蛋时刻!!!

歌曲:《记念》–回忆我们的青春!
在这里插入图片描述
每章一句你坚持的东西,总有一天会反过来向你拥抱的。感谢你能看到这里,点赞+关注+收藏+转发是对我最大的鼓励,咱们下期见!!!

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

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

相关文章

SpringBoot技术在人事管理中的应用:系统开发全解析

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常适…

windows下载配置CAS单点登录

下载 github下载 云盘瞎子啊 版本对应jdk&#xff0c;根据自身环境下载对应版本的cas。 安装 下载完成之后解压 按照.md文档执行打包命令 build.bat package配置 如果不用https&#xff0c;需要进行以下配置&#xff1a; 修改配置文件application.properties 在最后一行…

《大规模语言模型从理论到实践》第一轮学习--Fine-tuning微调

第一轮学习目标&#xff1a;了解大模型理论体系 第二轮学习目标&#xff1a;进行具体实操进一步深入理解大模型 从大语言模型的训练过程来理解微调 大预言模型训练主要包含四个阶段&#xff1a;预训练、有监督微调、奖励建模、强化学习。 预训练&#xff08;Pretraining&…

大数据-170 Elasticsearch 云服务器三节点集群搭建 测试运行

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

注意力机制2024持续发力!多尺度卷积+Attention一举拿下高分!模型准确率几乎100%

如何构建出更强大灵活的深度学习模型&#xff1f;或许我们可以考虑一个先进的方法&#xff1a;多尺度卷积注意力机制。 多尺度卷积先提供丰富的特征信息&#xff0c;注意力机制再从中筛选出关键信息&#xff0c;这样结合起来&#xff0c;不仅可以进一步提高模型的识别精度和效…

ubuntu中多cuda版本兼容问题

当ubuntu中已经有老版本的cuda时&#xff0c;按正常步骤直接下载新的cuda和cudnn&#xff0c;只需要注意在下载新的cuda版本时&#xff0c;出现“A symlink already exists at /usr/local/cuda. Update to this installation?”&#xff0c;选择“no”&#xff0c;之后按如下的…

redis与springBoot整合

前提 要实现,使用Redis存储登录状态 需要一个完整的前端后端的项目 前端项目搭建 解压脚手架 安装依赖 配置请求代理 选做: 禁用EsLint语法检查 Vue Admin Template关闭eslint校验&#xff0c;lintOnSave&#xff1a;false设置无效解决办法_lintonsave: false-CSDN博客 …

【精选】基于SpringBoot+Vue的生鲜交易系统设计与实现(源码+定制+开发)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

智能健康推荐:SpringBoot技术应用

5系统详细实现 5.1 管理员模块的实现 5.1.1 用户管理 基于智能推荐的卫生健康系统的系统管理员可以管理用户管理&#xff0c;可以对用户管理信息添加修改删除以及查询操作。具体界面的展示如图5.1所示。 图5.1 用户管理信息管理界面 5.1.2 科室类型管理 系统管理员可以查看对…

C++进阶——多态

目录 一、多态的概念 二、多态的实现 1.逻辑条件 2.代码层面 3.一个经典题目 4.虚函数重写的其它问题 4.1协变&#xff08;了解&#xff09; 4.2析构函数重写 4.3 override和final 4.4重载、重写&#xff08;覆盖&#xff09;和隐藏的对比 5.纯虚函数和抽象类 三、…

k8s的部署

一、K8S简介 Kubernetes中文官网&#xff1a;Kubernetes GitHub&#xff1a;github.com/kubernetes/kubernetes Kubernetes简称为K8s&#xff0c;是用于自动部署、扩缩和管理容器化应用程序的开源系统&#xff0c;起源于Google 集群管理工具Borg。 Kubernetes集群组件逻辑图…

AI核身-金融场景凭证篡改检测Baseline实践

金融领域交互式自证业务中涵盖信用成长、用户开户、商家入驻、职业认证、商户解限等多种应用场景&#xff0c;通常都需要用户提交一定的材料&#xff08;即凭证&#xff09;用于证明资产收入信息、身份信息、所有权信息、交易信息、资质信息等&#xff0c;而凭证的真实性一直是…

柑橘缺陷病害识别数据集YOLO 1290张,xml和txt标签都有;5类别:yolov5-v10通用 包含数据集➕模型➕可视化界面

YOLO柑橘缺陷病害识别数据集 ✓图片数量1290&#xff0c;xml和txt标签都有&#xff1b; 5类 类别&#xff1a;Orange-Black-Spot&#xff0c;Orange-Canker &#xff0c;Orange-Greening&#xff0c;Orange-Healthy&#xff0c;Orange-Melanose&#xff1b; 数据集 YOLO柑橘缺…

微信支付商家转账到零钱审核不通过解决方法

商家转账到零钱功能通常指的是微信支付提供的一项服务&#xff0c;允许商家将资金转账至用户的微信零钱账户。以下是商家转账到零钱的最优申请方案总结&#xff1a; 一、申请条件确认 1. 主体资格&#xff1a; a.申请主体必须为公司性质&#xff08;有限公司类型&#xff09;…

Apache Doris介绍

Apache Doris 的发展 Apache Doris 是一款基于 MPP 架构的高性能、实时的分析型数据库&#xff0c;以高效、简单、统一的特点被人们所熟知&#xff0c;仅需亚秒级响应时间即可返回海量数据下的查询结果&#xff0c;不仅可以支持高并发的点查询场景&#xff0c;也能支持高吞吐的…

【LeetCode每日一题】——724.寻找数组的中心下标

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目注意】六【题目示例】七【题目提示】八【解题思路】九【时间频度】十【代码实现】十一【提交结果】 一【题目类别】 前缀和 二【题目难度】 简单 三【题目编号】 724.寻找数组的中心下标 四【…

挖掘空间数据要素典型领域应用场景

空间数据要素作为数字经济的基石&#xff0c;正在多个领域发挥着重要作用。随着技术的发展&#xff0c;空间数据的应用场景不断拓展&#xff0c;为各行各业带来了深刻的变革。以下是几个典型的空间数据要素应用领域&#xff1a; 1. 城市规划与管理 空间数据在城市规划和管理中…

opencv学习:人脸识别器特征提取BPHFaceRecognizer_create算法的使用

BPHFaceRecognizer_create算法 在OpenCV中&#xff0c;cv2.face.LBPHFaceRecognizer_create()函数用于创建一个局部二值模式直方图&#xff08;Local Binary Patterns Histograms&#xff0c;简称LBPH&#xff09;人脸识别器。LBPH是一种用于人脸识别的特征提取方法&#xff0…

Python 入门(二、什么是 Python 的虚拟环境)

Python 入门第二课 &#xff0c;Python 的虚拟环境...... by 矜辰所致前言 本来以为环境搭建好了&#xff0c;就直接开始敲代码了&#xff0c;但是一直看到一个专业词汇&#xff1a;虚拟环境。 对于习惯了嵌入式 C 语言开发博主来说&#xff0c;一开始确实有点不明白&#xf…

k8s杂记

在node节点内部使用kubectl&#xff1a; rootmultinode-demo-m02:/# ps aux | grep kubelet root 218 3.1 1.6 2066316 62516 ? Ssl 07:35 0:29 /var/lib/minikube/binaries/v1.30.0/kubelet --bootstrap-kubeconfig/etc/kubernetes/bootstrap-kubelet.con…