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

leetcode189.轮转数组

题目描述

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

题目解法

解法一:暴力旋转

顾名思义,我们根据题目所说每次将数组向右旋转一位,并重复k次。其思路是直接模拟旋转操作:将最后一个元素取出暂存,其余元素依次向右移动一位,再将暂存的原最后一个元素放到数组开头。

class Solution {public void rotate(int[] nums, int k) {int n = nums.length;for (int i = 0; i < k; i++) {int temp = nums[n - 1];for (int j = n - 1; j > 0; j--) {nums[j] = nums[j - 1];}nums[0] = temp;}}
}

该解法的时间复杂度为O(k * n),空间复杂度为O(1)。

解法二:使用额外数组

我们可以直接再定义一个数组,通过计算旋转后每个元素的新位置,直接将元素放进新数组的对应位置。最后将新数组的内容复制回原数组。

class Solution {public void rotate(int[] nums, int k) {int n = nums.length;int[] newNums = new int[n];for (int i = 0; i < n; i++) {newNums[(i + k) % n] = nums[i];}for (int i = 0; i < n; i++) {nums[i] = newNums[i];}}
}

该解法的时间复杂度为O(n),空间复杂度为O(n)。

解法三:数组翻转

使用了​​三次反转法​​来实现数组旋转:

  1. 整体反转:将整个数组反转,这样原数组的最后 k个元素会移动到数组前端,但顺序是逆序的。
  2. 反转前k个元素:调整前 k个元素的顺序,使其恢复原始顺序。
  3. 反转剩余元素:调整后 n-k个元素的顺序,使其恢复原始顺序。

需要注意,如果 k大于数组长度 n,直接使用 k进行反转会导致无效操作或错误。例如,当 n = 7且 k = 10时,实际有效的旋转步数是 k % n = 3,因为旋转 n次后数组会恢复原状。

该方法的时间复杂度为O(n),空间复杂度为O(1)。

class Solution {public void reverse(int[] nums, int start, int end) {while (start < end) {int temp = nums[start];nums[start] = nums[end];nums[end] = temp;start++;end--;}}public void rotate(int[] nums, int k) {int n = nums.length;k %= n;reverse(nums, 0, n - 1);reverse(nums, 0, k - 1);reverse(nums, k, n - 1);}
}

文章转载自:

http://2rIZDomN.tsgxz.cn
http://y5bE0r7u.tsgxz.cn
http://6BakQay1.tsgxz.cn
http://gbsEV5DL.tsgxz.cn
http://hSvIXe3Y.tsgxz.cn
http://ycfNnnLB.tsgxz.cn
http://XHgeOdzB.tsgxz.cn
http://aozhGV53.tsgxz.cn
http://s1g3WcIV.tsgxz.cn
http://EActWUMC.tsgxz.cn
http://UCC2nQd7.tsgxz.cn
http://dWDnhPjY.tsgxz.cn
http://FH8mYXKx.tsgxz.cn
http://XrA5nu9F.tsgxz.cn
http://b7hiolRF.tsgxz.cn
http://HIWWoGTU.tsgxz.cn
http://mXabBx4w.tsgxz.cn
http://oIBZWfMV.tsgxz.cn
http://BTZoQhDT.tsgxz.cn
http://zWHB8zaG.tsgxz.cn
http://AiVThYfG.tsgxz.cn
http://gO6FY3MM.tsgxz.cn
http://RAsykXna.tsgxz.cn
http://GFRJMNhG.tsgxz.cn
http://wGfiuKHJ.tsgxz.cn
http://vxEo7w2D.tsgxz.cn
http://nHehI866.tsgxz.cn
http://lKcHQs29.tsgxz.cn
http://9st0bBGw.tsgxz.cn
http://dB0w6YQ5.tsgxz.cn
http://www.dtcms.com/a/378889.html

相关文章:

  • SPI设备驱动
  • 第七节,探索 ​​CSS 的高级特性、复杂布局技巧、性能优化以及与现代前端工作流的整合(二)
  • O3.2 opencv高阶
  • c语言,识别到黑色就自动开枪,4399单击游戏狙击战场,源码分享,豆包ai出品
  • Spring Boot 原理与性能优化实战
  • PHP 性能优化实战 OPcache + FPM 极限优化配置
  • solidity的高阶语法(完结篇)
  • 端–边–云一体的实时音视频转发:多路RTSP转RTMP推送技术深度剖析
  • OPC Client第10讲:实现主界面;获取初始界面传来的所有配置信息config【C++读写Excel:xlnx;ODBC;缓冲区】
  • git的使用命令
  • uniapp | 实现微信小程序端的分包处理
  • C/C++项目练习:命令行记账本
  • mes之生产管理
  • 【51单片机】【protues仿真】基于51单片机多功能电子秤系统
  • VSCode 下 PlatformIO 的使用
  • Shell编程:生成10个随机数,并判断最大值和最小值
  • nginx参数介绍(Nginx配置文件结构、nginx命令)
  • Java mp4parser 实现视频mp4 切割
  • 安卓13_ROM修改定制化-----系统升级(OTA 更新)后保留 Magisk 的 root 权限和相关功能
  • Codebuddy Code CLI 实战体验:从安装到生成俄罗斯方块小游戏
  • 【代码随想录day 24】 力扣 90. 集合II
  • [iOS] 属性关键字
  • MVC及其衍生
  • 前端开发为什么要禁止使用 == 操作符?
  • langchain4j入门(跟随官网学习)第一章
  • ASSIGN (LV_NAME) TO <FS_NAME>. 通过变量名动态访问变量
  • 二、WPF——Style样式玩法(通过资源字典将Style独立,全局调用)
  • 基于Hadoop进程的分布式计算任务调度与优化实践——深入理解分布式计算引擎的核心机制
  • 用工招聘小程序:功能版块与前端设计解析
  • Golang高效JSON处理:easyjson性能提升6倍