20 轮转数组

20 轮转数组

在这里插入图片描述

20.1 轮转数组解决方案

class Solution {
public:void rotate(vector<int>& nums, int k) {int n = nums.size();k = k % n;  // 如果 k 大于数组长度,取模减少不必要的旋转// 第一步:反转整个数组reverse(nums.begin(), nums.end());// 第二步:反转前 k 个元素reverse(nums.begin(), nums.begin() + k);// 第三步:反转剩下的 n-k 个元素reverse(nums.begin() + k, nums.end());}
};

解释

  • 模运算 (k = k % n): 这一步确保如果 k 比数组长度大,就只进行必要的旋转。
  • 反转整个数组:这一步将数组中的最后 k 个元素放到了前面,并且顺序是反的。
  • 反转前 k 个元素:这一步恢复了前 k 个元素的顺序。
  • 反转剩下的元素:最后一步恢复了其余 n-k 个元素的顺序。
    时间复杂度
  • 时间复杂度: O ( n ) O(n) O(n),其中 n 是数组的大小。反转数组和子数组的操作都是线性时间的。
  • 空间复杂度: O ( 1 ) O(1) O(1),这是原地操作,不需要额外的空间。
  • 这种解法在时间和空间上都是非常高效的,适用于需要处理大数组的情况。

20.2 举例说明

假设我们有一个数组 nums = [1, 2, 3, 4, 5, 6, 7],并且要求我们将数组向右旋转 k = 3 步。

目标: 将 nums 向右旋转 3 步,期望的输出是 [5, 6, 7, 1, 2, 3, 4]。

  • 步骤 1:先进行一次整体反转

    [7, 6, 5, 4, 3, 2, 1]
    
  • 步骤 2:反转前 k = 3 个元素
    我们将数组的前 k = 3 个元素 [7, 6, 5] 反转:

    [5, 6, 7, 4, 3, 2, 1]
    
  • 步骤 3:反转剩余的 n-k = 7 - 3 = 4 个元素
    我们对数组剩余的部分 [4, 3, 2, 1] 进行反转:

    [5, 6, 7, 1, 2, 3, 4]
    
  • 结果:
    向右旋转了 3 步,得到了目标数组 [5, 6, 7, 1, 2, 3, 4]。

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

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

相关文章

字符串相关题解

目录 字母异位词 最长公共前缀 博主主页&#xff1a;东洛的克莱斯韦克-CSDN博客 字母异位词 49. 字母异位词分组 - 力扣&#xff08;LeetCode&#xff09; 这道题更像一道语法题&#xff0c;考察对容器的掌握情况。如果按题目要求去模拟&#xff0c;不仅要分析每个字符串&am…

【微软:多模态基础模型】(3)视觉生成

欢迎关注【youcans的AGI学习笔记】原创作品 【微软&#xff1a;多模态基础模型】&#xff08;1&#xff09;从专家到通用助手 【微软&#xff1a;多模态基础模型】&#xff08;2&#xff09;视觉理解 【微软&#xff1a;多模态基础模型】&#xff08;3&#xff09;视觉生成 【微…

CentOS8 启动错误,enter emergency mode ,开机直接进入紧急救援模式,报错 Failed to mount /home 解决方法

先看现场问题截图&#xff1a; 1.根据提示 按 ctrld 输入 root 密码&#xff0c;进入系统。 2. 在紧急模式下运行&#xff1a;journalctl -xe &#xff0c;查看相关日志&#xff0c;找到关键点&#xff1a; Failed to mount /home 3.接着执行修复命令&#xff1a; xfs_repa…

2024140读书笔记|《作家榜名著:生如夏花·泰戈尔经典诗选》——你从世界的生命的溪流浮泛而下,终于停泊在我的心头

2024140读书笔记|《作家榜名著&#xff1a;生如夏花泰戈尔经典诗选》——你从世界的生命的溪流浮泛而下&#xff0c;终于停泊在我的心头 《作家榜名著&#xff1a;生如夏花泰戈尔经典诗选》[印]泰戈尔&#xff0c;郑振铎译&#xff0c;泰戈尔的诗有的清丽&#xff0c;有的童真&…

lenovo联想ThinkBook 14 G5 ABP(21JE)原装出厂Windows11系统恢复镜像包下载

适用机型 &#xff1a;【21JE】 链接&#xff1a;https://pan.baidu.com/s/1FUjwN8ZeaQ9qr3kNalSkYg?pwdqasf 提取码&#xff1a;qasf 联想原装出厂系统自带所有驱动、出厂主题壁纸、系统属性联机支持标志、系统属性专属LOGO标志、Office办公软件、联想电脑管家、联想浏览…

MySQL 数据类型

数值类型 int类型 类型说明tinyint1字节&#xff0c;范围从-128到127&#xff08;有符号&#xff09;&#xff0c;0到255&#xff08;无符号&#xff09;smallint2字节&#xff0c;范围从-2^15到2^15-1&#xff08;有符号&#xff09;&#xff0c;0到2^16-1&#xff08;无符号…

【WPF】Prism学习(三)

Prism Commands 1.复合命令&#xff08;Composite Commanding&#xff09; 这段内容主要介绍了在应用程序中如何使用复合命令&#xff08;Composite Commands&#xff09;来实现多个视图模型&#xff08;ViewModels&#xff09;上的命令。以下是对这段内容的解释&#xff1a; …

用go语言后端开发速查

文章目录 一、发送请求和接收请求示例1.1 发送请求1.2 接收请求 二、发送form-data格式的数据示例 用go语言发送请求和接收请求的快速参考 一、发送请求和接收请求示例 1.1 发送请求 package mainimport ("bytes""encoding/json""fmt""ne…

SpringCloud Alibaba入门简介和Nacos服务注册和配置中心

前面已经把spring cloud相关的组件都一一学了个遍,现在有点小佩服自己…本来计划今天周末好好出去玩一圈,天气太热了,39了都,还是在办公室学习吧,进行下面的springCloud Alibaba 学习吧…不废话了赶快进入正体 1. SpringCloud Alibaba入门简介 1.1 why会出现SpringCloud alib…

如何让Excel公式中的参数实现动态引用

如果你想成为Excel函数高手&#xff0c;仅仅掌握VLOOKUP和Countif等函数是远远不够的&#xff0c;起码你得学会使用INDIRECT函数&#xff0c;熟练掌握INDIRECT函数能让你从一个初学者晋级为高手&#xff0c;学会它就好比孙悟空掌握了72般变化的基本功&#xff0c;你说厉不厉害。…

【流量分析】常见webshell流量分析

免责声明&#xff1a;本文仅作分享&#xff01; 对于常见的webshell工具&#xff0c;就要知攻善防&#xff1b;后门脚本的执行导致webshell的连接&#xff0c;对于默认的脚本要了解&#xff0c;才能更清晰&#xff0c;更方便应对。 &#xff08;这里仅针对部分后门代码进行流量…

车载诊断架构 --- 关于DTC的开始检测条件

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 所有人的看法和评价都是暂时的,只有自己的经历是伴随一生的,几乎所有的担忧和畏惧,都是来源于自己的想象,只有你真的去做了,才会发现有多快乐。…

掌握 Spring Boot 的最佳方法 – 学习路线图

在企业界&#xff0c;人们说“Java 永垂不朽&#xff01;”。但为什么呢&#xff1f;Java 仍然是开发企业应用程序的主要平台之一。大型公司使用企业应用程序来赚钱。这些应用程序具有高可靠性要求和庞大的代码库。根据Java开发人员生产力报告&#xff0c;62% 的受访开发人员使…

《操作系统 - 清华大学》3 -3:连续内存分配:内存碎片与分区的动态分配

文章目录 0. 概述1. 内存碎片问题2. 动态分配3. 首次适配算法4. 最优适配算法5. 最差适配算法 0. 概述 内存分配是操作系统管理过程中很重要的环节&#xff0c;首先需要考虑的是一块连续区域分配的过程&#xff0c;这个过程中会有很多问题&#xff0c;首先比较关注的一个问题是…

MySQL学习/复习3约束

一、表的常用约束 二、null、not null 三、默认值default 3.1default与null 四、注释commen 注意事项&#xff1a;desc查不到注释 五、zerofill 5.1填充0以控制宽度 六、primary_key 6.1复合主键 七、auto_increment 7.1last_insert_id() 八、unique 8.1unique与primary_key …

python视频编辑中的蒙版技术:创意与技术相结合

在数字视频编辑的世界里&#xff0c;蒙版技术是一种强大的工具&#xff0c;它允许我们在视频帧上进行精确的编辑和效果叠加。通过蒙版&#xff0c;我们可以控制哪些部分的视频内容被显示或隐藏&#xff0c;从而创造出各种视觉效果和过渡。在本文中&#xff0c;我们将探讨如何使…

文件操作和IO

目录 一. 文件预备知识 1. 硬盘 2. 文件 (1) 概念 (2) 文件路径 (3) 文件类型 二. 文件操作 1. 文件系统操作 [1] File常见的构造方法 [2] File的常用方法 [3] 查看某目录下所有的目录和文件 2. 文件内容操作 (1) 打开文件 (2) 关闭文件 (3) 读文件 (4) 写文件 …

PCB结构与组成

PCB板就是印制电路板&#xff0c;又称印刷电路板&#xff0c;是电子元器件电气连接的提供者。PCB板转化成我们所熟悉的电路板过程如下&#xff1a; 了解完定义&#xff0c;下面是我们电路板的标识 可简单的把PCB板拆分成六个部分&#xff1a;导线、铺铜、过孔、焊盘、丝印、阻焊…

OrienterNet在二维公共地图实现视觉定位的模型

论文来自MetaAI&#xff1a; https://arxiv.org/pdf/2304.02009https://arxiv.org/pdf/2304.02009github代码&#xff1a; https://github.com/facebookresearch/OrienterNet?tabreadme-ov-filehttps://github.com/facebookresearch/OrienterNet?tabreadme-ov-file 研究目…

LEAN 之 多态机制(Polymorphism,Type class)简析

LEAN 通过 类型类&#xff08;Type Class&#xff09;来提供的多态机制&#xff08;Polymorphism&#xff09;。 以∅&#xff1a;Set α 为例&#xff0c;有 Set α 实现 class EmptyCollection。 其中&#xff0c;class EmptyCollection 定义如下&#xff1a; 也就是&#xf…