leetcode-189. 旋转数组 原地递归算法(非官方的三种方法)

Problem: 189. 轮转数组

思路

首先,很明显,题目要求的操作等同于将数组的后k%n个元素移动到前面来
然后我们思考原地操作的方法:
(为了方便讲解,我们先假设k<=n/2)

1.我们将数组划分为 [A,B]两段,其中B为后k个元素

2.那么我们想要实现的就是将B放到图中A1(数组的前k个元素)的位置

3.想要做到原地操作,那么容易想到:直接交换A1和B。这样B到了正确的位置,A1原始位置的数组也被保存了下来(放到了B原来的位置)

4.完成上一步操作后,我们得到的数组的形式是 [B,A2,A1],而题目预期的结果应该是 [B,A1,A2],可以发现 现在只要将由 [A2,A1] 构成的新数组进行题目中描述的旋转操作就可以转化为 [A1,A2] 了(形成递归)。

5.递归形成后,在新数组上调用我们的rotate函数就可以将新数组部分也完成旋转了。
(k>n/2的情况参考上面的方式也能推理出来,留给屏幕前的你来完成👍)

img

复杂度

时间复杂度:

假设共递归 t t t次,每一次递归都会使得 m i ( i ϵ [ 1 , t ] ) m_i(i \epsilon [1,t]) mi(iϵ[1,t])个元素去到目标位置,这个操作的代价是 m i m_i mi次交换操作,即每层递归为 O ( m ) O(m) O(m)。所有的 m i m_i mi加起来就等于总的元素个数 n n n,即总的时间复杂度为 O ( n ) O(n) O(n)

空间复杂度:

由于是在原地进行操作,故空间复杂度为 O ( 1 ) O(1) O(1)。但是其实递归的堆栈会消耗一定的空间。

Code

C++

class Solution {
public:void rotate(vector<int>& nums,int l,int r,int k){int n=r-l;k%=n;if(l+1>=r||!k)return;int i=l,j=0;if(k<=n/2)j=n-k+l;else j=k+l;while(j<r)swap(nums[i++],nums[j++]);if(k<=n/2)rotate(nums,l+k,r,k);else rotate(nums,l,r-n+k,2*k-n);return;}void rotate(vector<int>& nums, int k) {rotate(nums,0,nums.size(),k);return ;}
};

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

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

相关文章

7. CSS 网格布局

CSS3引入了强大的网格布局&#xff08;Grid Layout&#xff09;&#xff0c;它提供了一种二维的布局方式&#xff0c;使得创建复杂的网页布局变得更加简单和直观。通过定义行和列&#xff0c;我们可以精确控制网页元素的排列和对齐。本章将详细介绍网格布局的基本概念和属性&am…

pytorch学习day1

一.pytorch主要模块介绍 1.1 模块介绍 模块描述torch包含激活函数和主要的张量操作torch.Tensor定义了张量的数据类型&#xff0c;方法可返回新张量&#xff0c;方法后缀带下划线可修改张量本身torch.cuda定义了 CUDA 运算相关的函数&#xff0c;如检查 CUDA 是否可用&#x…

橙派探险记:开箱香橙派 AIpro 与 疲劳驾驶检测的奇幻之旅

橙派探险记&#xff1a;开箱香橙派 AIpro 与 疲劳驾驶检测的奇幻之旅 引子&#xff1a;神秘包裹的到来 在很久很久以前......在一个阳光明媚的下午&#xff0c;我终于收到了期待已久的包裹——香橙派 AIpro。这份礼物辗转两次才到我的手上&#xff0c;每一天我都怀着满心的期待…

JetLinks物联网平台在windows 7搭建(前后端)部署教程

近期对接TCP、modbusTCP等自定义解析&#xff0c;做了很多万能解析的方法&#xff0c;却都不遂人意&#xff0c;而一直在用的ThingsBoard不能直接对接TCP透传(企业版除外)&#xff0c;需要在外围做一些自定义解析&#xff0c;然后转json再mqtt上传&#xff0c;感觉来说比较麻烦…

RTKLIB学习--前向滤波

#前言 如果要详细了解RTKLIB或进行二次开发&#xff0c;了解obs指针所存储每个历元的卫星观测数据是必不可少的环节&#xff0c;此文对RTKLIB的&#xff08;由于后处理和实时运行都要用到前向滤波&#xff09;前向滤波&#xff08;从文件头读取观测数据到obs结构体中&#xff0…

Android笔记--应用安装

这一节了解一下普通应用安装app的方式&#xff0c;主要是唤起系统来安装&#xff0c;直接上代码: 申请权限 <uses-permission android:name"android.permission.READ_EXTERNAL_STORAGE"/><uses-permission android:name"android.permission.WRITE_EXT…

【包装类简单认识泛型】

目录 1&#xff0c;包装类 1.1 基本数据类型和对应的包装类 1.2 装箱和拆箱 2&#xff0c;什么是泛型 3&#xff0c;引出泛型 3.1 语法 4&#xff0c;泛型如何编译的 4.1 擦除机制 4.2 为什么不能实例化泛型类型数组 5&#xff0c;泛型的上界 5.1 语法 5.2 复杂示例…

Windows内核函数 - 添加、修改注册表键值

打开注册表的句柄后&#xff0c;就可以对该项进行设置和修改了。注册表是以二元形式存储的&#xff0c;即“键名”和“键值”。通过键名设置键值&#xff0c;而键值可以划分几个类&#xff0c;如下表所示。 表1 键值的分类 在添加和修改注册表键值的时候&#xff0c;要分类进行…

dp秒杀优惠券

1、全局id生成器 当用户抢购时&#xff0c;就会生成订单并保存到tb_voucher_order这张表中&#xff0c;而订单表如果使用数据库自增ID就存在一些问题&#xff1a; id的规律性太明显受单表数据量的限制 场景分析&#xff1a;如果我们的id具有太明显的规则&#xff0c;用户或者…

前端实时更新数据的几种方式

实时更新数据的几种方式 背景 在我们的日常工作中,我们往往会遇到客户端需要实时获取服务端最新数据的场景,例如聊天系统(WeChat/Telegram),股票行情查看软件(同花顺/富途),feed 推送系统(Twitter/微博)等等。在实现这些需求的时候,我们的技术方案是有很多的,本文将会给…

C++修改文件后缀名;链表循环删除乘积为10的元素

1. 文件名修改 在一个文件目录下&#xff0c;存在相同扩展名 ".stp"的多个文件&#xff0c;对这样的文件名&#xff0c;请修改文件名称&#xff0c;在文件 名称后增加排序标识 "-01" &#xff0c; "-02" &#xff0c; "-03"... #incl…

python基于百度,哈工大等停用表进行的中文分词

import os import pandas as pd import jieba# 加载停用词 def load_stopwords(filenames):stopwords set()for filename in filenames:with open(filename, r, encodingutf-8) as f:for line in f:stopwords.add(line.strip())return stopwords# 中文分词并去除停用词 def se…

企业网站有必要进行软件测试吗?网站测试有哪些测试流程?

企业网站在现代商业中扮演着重要的角色&#xff0c;它不仅是企业形象的重要体现&#xff0c;也是与客户、合作伙伴进行沟通与交流的重要渠道。然而&#xff0c;由于企业网站的复杂性和关键性&#xff0c;其中可能存在各种潜在的问题和隐患。因此&#xff0c;对企业网站进行软件…

企业如何安全的使用U盘

问题的背景&#xff1a; U盘&#xff08;USB闪存盘&#xff09;的优点主要包括&#xff1a; 便携性&#xff1a;U盘体积小、重量轻&#xff0c;便于携带&#xff0c;可以轻松地在不同设备间传输数据。高速传输&#xff1a;相比传统机械硬盘&#xff0c;U盘的读写速度更快&…

el-upload上传文件使用http-request方法,formdata传集合List到后台

el-upload上传文件 前言1、使用el-upload上传文件1.1代码演示1.2回显列表2、formdata传集合List到Springboot后台前言 在使用el-upload上传文件,会遇到必须使用:action="upload_url"远端链接的问题,本章我们讲解怎样不适用远端链接,通过上传获取到本地的file文件…

海尔智家牵手罗兰-加洛斯,看全球创牌再升级

晚春的巴黎西郊&#xff0c;古典建筑群与七叶树林荫交相掩映&#xff0c;坐落于此的罗兰加洛斯球场内座无虚席。 来自全球各地的数万观众&#xff0c;正与场外街道上的驻足者们一起&#xff0c;等待着全世界最美好的网球声响起…… 当地时间5月26日&#xff0c;全球四大职业网…

RFM模型-分析母婴类产品

1&#xff0c;场景描述 假设我们是某电商平台的数据分析师&#xff0c;负责分析母婴产品线的用户数据。母婴产品的购买行为具有一定的周期性和生命周期特征&#xff0c;如用户在不同怀孕阶段的需求不同&#xff0c;以及宝宝出生后的不同成长阶段需要不同的产品。 2&#xff0…

Flutter 中的 RichText 小部件:全面指南

Flutter 中的 RichText 小部件&#xff1a;全面指南 Flutter 是一个流行的跨平台 UI 工具包&#xff0c;它允许开发者使用 Dart 语言来构建高性能、高保真的移动应用。在 Flutter 中&#xff0c;RichText 是一个非常有用的小部件&#xff0c;它允许开发者在同一个文本行中混合…

XV7011BB可为智能割草机的导航系统提供新的解决方案

智能割草机作为现代家庭和商业草坪维护保养的重要工具&#xff0c;其精确的定位和导航系统对于提高机器工作效率和确保安全运行至关重要。在智能割草机的发展历程中&#xff0c;定位和导航技术一直是关键的创新点。 传统的基于RTK(实时动态差分定位技术)技术的割草机虽然在…

景源畅信电商:抖音开店步骤是什么?

随着社交媒体的兴起&#xff0c;抖音已经成为一个不可忽视的电商平台。许多人都希望通过抖音开店来实现自己的创业梦想。那么&#xff0c;抖音开店的具体步骤是什么呢?接下来&#xff0c;我们将详细阐述这一问题。 一、明确回答问题抖音开店的步骤主要包括&#xff1a;注册账号…