当前位置: 首页 > news >正文

详解数组的轮转

𝙉𝙞𝙘𝙚!!👏🏻‧✧̣̥̇‧✦👏🏻‧✧̣̥̇‧✦ 👏🏻‧✧̣̥̇:Solitary-walk

      ⸝⋆   ━━━┓
     - 个性标签 - :来于“云”的“羽球人”。 Talk is cheap. Show me the code
┗━━━━━━━  ➴ ⷯ

本人座右铭 :   欲达高峰,必忍其痛;欲戴王冠,必承其重。

👑💎💎👑💎💎👑 
💎💎💎自💎💎💎
💎💎💎信💎💎💎
👑💎💎 💎💎👑    希望在看完我的此篇博客后可以对你有帮助哟

👑👑💎💎💎👑👑   此外,希望各位大佬们在看完后,可以互赞互关一下,看到必回
👑👑👑💎👑👑👑

目录:

一:题目

二:解题思路的分析

三:触类旁通

四:结语


一:题目

 二:解题思路的分析

1:暴力求解

1)当 k = 1,要想达到最终结果我们只需要将数组最后一个元素保留,其余元素依次为我的元素 7让道,(依次往后挪动

2)那么问题又来了,到底是从后往前挪动 还是从前往后挪动数据

 当然是从后往前挪动了,你想对了吗???(因为从前往后挪动数据会造成数据的覆盖,全部是数据2)

当 k = 2 ,我们直接接着再  k = 1的那个图的基础上进行同样的挪动,这里用循环来实现就可以

void rotate(int* nums, int numsSize, int k)
{k %= numsSize;//避免k的大小超过数组的大小,造成旋转无效  k = 8,numSize = 4,此时不需要轮转//暴力求解// 数组最后一个元素进行保留,其余元素一次后挪动for(int j = 0 ;j<k;j++){int temp = *(nums+numsSize-1);//挪动数据:从后往前挪动for(int i = numsSize-1;i >= 1;i--){*(nums+i) = *(nums+i-1);}*(nums) = temp;}}

注意这里有个坑:就是当k大于数组的大小的时候要进行 k对numsSize进行取余,避免无效的旋转

 k = 9,这里只需要进行1次旋转就可以

暴力求解对应的事件复杂度是  O(N^2) ,在力扣上是跑不过去的

2: 借助3段逆置 

核心思想:

1)先对前 n-k 个元素进行逆置

2)在对后 k 个元素进行逆置

3)最后再对整个数组进行逆置

注意: 以上的顺序不能颠倒;其次就是进行下标传参的时候要仔细

 这里我们借助Reverse(int*arr,int lef,int rig)这个函数来进行逆置

void Reverse(int* arr, int lef, int rig)
{while (lef < rig){int tmp = *(arr + lef);//便于进行交换*(arr + lef) = *(arr + rig);*(arr + rig) = tmp;//类似于双指针的思想lef++;rig--;}
}

此方法对应的时间复杂度是 O(N),空间复杂度O(1)

三:触类旁通

借助三段逆置的思想实现字符串的逆置

题目:

 把字符串 "abcd" 经过2次旋转后实现  "cdab"

 前  n - k 对应的

 后k对应的

最后整个数组对应的

ok~~~话不多说,咱代码见

void Reverse(char* str, int left, int right)
{// 逆置数组while (left < right){int tmp = *(str + left);*(str + left) = *(str + right);*(str + right) = tmp;left++;right--;}
}
void LeftRound3(char* str, int k)
{// 局部旋转  只需进行翻转3次即可//逆置数组   确定下标位置int len = strlen(str);int k  = k % len; // 避免无效旋转Reverse(str,0,k - 1);Reverse(str, k,len-1);Reverse(str, 0, len - 1);}


结语:以上就是小生今日为大家要share的内容,要是感觉还不错的话,给个关注,咱一波赞走起,看到必回~~~

相关文章:

  • 总结项目中oauth2模块的配置流程及实际业务oauth2认证记录(Spring Security)
  • ArcGIS Pro中Conda环境的Scripts文件解读
  • 在 Android 手机上从SD 卡恢复数据的 6 个有效应用程序
  • C#判断骨龄与生活年龄的比较
  • MySQL8 一键部署
  • 插入排序 InsertionSort
  • 多线程编程设计模式(单例,阻塞队列,定时器,线程池)
  • asp.net core 教程
  • flutter flutter pub cache clean和flutter clean区别
  • 04-获取认证的用户身份信息
  • DS|串应用
  • Mybatis SQL构建器类 - SqlBuilder and SelectBuilder (已经废弃)
  • LOAM: Lidar Odometry and Mapping in Real-time 论文阅读
  • 【Jmeter】Jmeter基础9-BeanShell介绍
  • 云上安全责任共担模型
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • 3.7、@ResponseBody 和 @RestController
  • Apache Pulsar 2.1 重磅发布
  • dva中组件的懒加载
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • MQ框架的比较
  • PAT A1092
  • Python中eval与exec的使用及区别
  • React-生命周期杂记
  • TCP拥塞控制
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • 对JS继承的一点思考
  • 二维平面内的碰撞检测【一】
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • 进程与线程(三)——进程/线程间通信
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • #微信小程序:微信小程序常见的配置传旨
  • $.ajax()
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (BFS)hdoj2377-Bus Pass
  • (pojstep1.3.1)1017(构造法模拟)
  • (windows2012共享文件夹和防火墙设置
  • (二)正点原子I.MX6ULL u-boot移植
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (转)http协议
  • (转)平衡树
  • .Net Core缓存组件(MemoryCache)源码解析
  • .NET开源的一个小而快并且功能强大的 Windows 动态桌面软件 - DreamScene2
  • .NET使用存储过程实现对数据库的增删改查
  • .net之微信企业号开发(一) 所使用的环境与工具以及准备工作
  • .Net转前端开发-启航篇,如何定制博客园主题
  • .w文件怎么转成html文件,使用pandoc进行Word与Markdown文件转化
  • ?php echo ?,?php echo Hello world!;?
  • @RequestBody详解:用于获取请求体中的Json格式参数
  • @RestController注解的使用
  • @transaction 提交事务_【读源码】剖析TCCTransaction事务提交实现细节
  • []使用 Tortoise SVN 创建 Externals 外部引用目录