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

轮转数组(元素位置对调、数据的左旋、右旋)

189. 轮转数组

给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数

示例 1:

输入: nums = [1,2,3,4,5,6,7], k = 3
输出: [5,6,7,1,2,3,4]
解释:
向右轮转 1 步: [7,1,2,3,4,5,6]
向右轮转 2 步: [6,7,1,2,3,4,5]
向右轮转 3 步: [5,6,7,1,2,3,4]

思路:(题目已经提示你,轮转数组!!!)

1.先反转整个数组

2.再反转数组的 1~K 项

3.再反转 K~numsSize 项

4.得到结果

void reverse(int* p, int left, int right)      //为了第三次旋转,需要自己传左右位置

{

    //对两端进行操作的时候,一般定义left 和 right 作为下标

    while(left < right)       //     < 不是 <=

    {

        int tmp = p[left];    //解引用可以对实参内容进行修改

        p[left++] = p[right];

        p[right--] = tmp;

    }

}

void rotate(int* nums, int numsSize, int k) {             //void 不需要返回

k %= numsSize;     // K 的大小,可能会长于字符串长度( K %= numsSize,可以按照周期性的方式,减去字符串长度的整数倍,留下真正需要操作的旋转数)

reverse(nums, 0, numsSize - 1);

reverse(nums, 0, k - 1);

reverse(nums, k, numsSize - 1);

}

经验总结:1、此题借助K,将数组分为两个部分,学会对整体和部分进行拆分操作

2.    //对两端进行操作的时候,一般定义left 和 right 作为下标(比如旋转)

3.题目中的数组是nums,不是arr

http://www.lryc.cn/news/310841.html

相关文章:

  • 喜迎乔迁,开启新章 ▏易我科技新办公区乔迁庆典隆重举行
  • 多个地区地图可视化
  • 学习使用paddle来构造hrnet网络模型
  • Redis 多线程操作同一个Key如何保证一致性?
  • 单链表合并
  • 【如何像网吧一样弄个游戏菜单在家里】
  • CSS~~
  • Docker技术概论(1):Docker与虚拟化技术比较
  • alibabacloud学习笔记07(小滴课堂)
  • Ansible-Playbook
  • UE5常见问题处理笔记
  • docker中hyperf项目配置虚拟域名
  • PID闭环控制算法的学习与简单使用
  • 【无刷电机学习】光耦HCNR200基本原理及应用(资料摘抄)
  • 【LeetCode】1768_交替合并字符串_C
  • C#解析JSON
  • AI图像识别算法助力安全生产*提升风险监测效率---豌豆云
  • CSS技巧:实现两个div在同一行显示的方法
  • 【Unity】Node.js安装与配置环境
  • Vue3:使用 Composition API 不需要 Pinia
  • ExoPlayer 播放视频黑屏的解决方法
  • C语言初阶—数组
  • 飞桨(PaddlePaddle)数据预处理教程
  • MYSQL C++链接接口编程
  • 并发编程中常见的设计模式,c++多线程如何设计
  • 解决android studio build Output中文乱码
  • [云原生] K8s之pod进阶
  • [Unity3d] 网络开发基础【个人复习笔记/有不足之处欢迎斧正/侵删】
  • Tomcat的配置文件
  • 猴子吃桃问题(python版)