LeetCode 189 轮转数组|3种解法拆解,从暴力到O(1)原地最优解
文章前言今天拆解 LeetCode Hot100 经典数组题189. 轮转数组题目要求将数组整体向右轮转 k 个位置不仅可以练习数组基础操作还能掌握「原地数组翻转」经典算法技巧面试高频原题。本文依次讲解暴力移位、临时数组、三次数组翻转三种实现方案对比时间、空间复杂度带你吃透最优原地解法。一、题目原题题目描述给定一个整数数组 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]示例 2输入nums [-1,-100,3,99], k 2输出[3,99,-1,-100]进阶要求1.尽可能想出更多的解决方案至少有三种不同的方法可以解决这个问题。2.你可以使用空间复杂度为 O(1) 的原地算法解决这个问题吗前置小知识点当k 数组长度时旋转整数组长度次数等于数组还原因此统一处理k k % nums.length去除无效旋转。二、解法一暴力循环移位直观易懂大数据量超时思路循环 k 次每一轮只将数组最后一位元素取出整体数组向后挪一位最后把末尾元素放到数组头部。Java 代码实现classSolution{publicvoidrotate(int[]nums,intk){intnnums.length;kk%n;// 循环k次每次右移1位for(inti0;ik;i){// 保存最后一个元素intlastnums[n-1];// 数组整体后移一位for(intjn-1;j0;j--){nums[j]nums[j-1];}// 头部赋值nums[0]last;}}}复杂度分析•时间复杂度O(n×k)数组长度 n循环 k 次移位数组很长时直接超时•空间复杂度O(1)仅使用临时变量存储末尾值优缺点优点逻辑直白新手容易理解轮转逻辑缺点效率极低力扣大数据用例直接超时工程基本不用。三、解法二临时数组辅助空间换时间刷题快速过题思路新建一个等长临时数组通过公式temp[(i k) % n] nums[i]计算每个元素旋转后的下标全部存入临时数组最后使用System.arraycopy将临时数组完整覆盖到原数组。Java 代码实现classSolution{publicvoidrotate(int[]nums,intk){intnnums.length;kk%n;int[]tempnewint[n];// 填充临时数组for(inti0;in;i){temp[(ik)%n]nums[i];}// 将临时数组全部复制覆盖原数组System.arraycopy(temp,0,nums,0,n);}}关键知识点System.arraycopy 数组覆盖System.arraycopy(源数组, 源起始索引, 目标数组, 目标起始索引, 复制长度)是 Java 底层原生数组拷贝方法性能优于 for 循环赋值可以直接原地修改原数组内容适配本题void无返回值要求。复杂度分析•时间复杂度O(n)仅一次遍历数组•空间复杂度O(n)额外开辟一个数组空间优缺点优点代码简洁、一次遍历完成通过率稳定缺点不符合进阶原地算法要求额外占用内存。四、解法三三次数组翻转原地最优解面试核心考点核心原理无需额外数组依靠自定义区间反转函数完成轮转三步走样例[1,2,3,4,5,6,7],k3演示整体数组反转[7,6,5,4,3,2,1]反转前 k 个元素[5,6,7,4,3,2,1]反转后半段剩余元素[5,6,7,1,2,3,4]自定义 reverse 反转工具方法双指针实现区间原地反转输入数组 左右边界直接修改数组内容Java 代码实现反转函数代码// 闭区间[left,right]数组反转privatevoidreverse(int[]nums,intleft,intright){while(leftright){inttempnums[left];nums[left]nums[right];nums[right]temp;left;right--;}}完整代码classSolution{publicvoidrotate(int[]nums,intk){intlennums.length;kk%len;reverse(nums,0,len-1);// 整体反转reverse(nums,0,k-1);// 前k位反转reverse(nums,k,len-1);// 后半段反转}// 区间反转工具函数privatevoidreverse(int[]nums,intleft,intright){while(leftright){inttempnums[left];nums[left]nums[right];nums[right]temp;left;right--;}}}复杂度分析•时间复杂度O(n)数组每个元素仅被交换 2 次•空间复杂度O(1)仅临时交换变量纯原地操作优缺点优点完美满足进阶 O (1 空间要求面试标准答案反转函数是数组通用工具可以复用在大量算法题缺点需要理解反转逻辑新手需要画图辅助理解。五、三种方案横向对比表六、核心总结1.数组旋转预处理必做k k % nums.length规避超大 k 值无效运算2.System.arraycopy是数组覆盖赋值高效 API注意区分数组直接赋值只是修改引用无法修改原数组内容3.双指针reverse区间反转是数组高频工具函数必须熟练手写4.面试遇到数组旋转类题目直接给出三次反转原地解法是最优解题答案。

相关新闻

【Bug已解决】`accelerate.load_checkpoint_and_dispatch` does not load GPT-OSS Models correctly 解决方案

【Bug已解决】`accelerate.load_checkpoint_and_dispatch` does not load GPT-OSS Models correctly 解决方案

【Bug已解决】accelerate.load_checkpoint_and_dispatch does not load GPT-OSS Models correctly 解决方案 一、现象长什么样 用 accelerate 的 load_checkpoint_and_dispatch 加载 GPT-OSS 系列模型(带 device_map 做多卡 / offload 分发),…

2026/10/14 15:09:40 阅读更多 →
PADS 9.5在Win10/Win11界面显示不全的终极修复方案与原理剖析

PADS 9.5在Win10/Win11界面显示不全的终极修复方案与原理剖析

1. 项目概述:一个老牌EDA工具的“现代化”烦恼如果你是一位还在使用PADS 9.5进行电路设计的硬件工程师,尤其是在Windows 10或更高版本的系统上,那么你大概率遇到过这两个让人抓狂的界面问题:在PADS Logic中,当你点击“…

2026/10/13 3:07:41 阅读更多 →
西安交大张鸿教授模拟CMOS集成电路设计课程:对标Razavi教材的系统学习指南

西安交大张鸿教授模拟CMOS集成电路设计课程:对标Razavi教材的系统学习指南

这次我们来看一套来自西安交通大学张鸿教授的《集成电路设计》课程资源,它系统性地讲解了模拟CMOS集成电路设计的核心知识,并与业界经典教材《Design of Analog CMOS Integrated Circuits》(Razavi著)的前10章内容对应。对于正在学…

2026/10/12 14:12:36 阅读更多 →

最新新闻

Webots 6 时代技术演进全解析:API 重构、OGRE 渲染迁移与物理引擎升级的版本档案

Webots 6 时代技术演进全解析:API 重构、OGRE 渲染迁移与物理引擎升级的版本档案

科研自动驾驶物理引擎 【免费下载链接】webots Webots Robot Simulator 项目地址: https://gitcode.com/gh_mirrors/web/webots 点击查看 免费下载 Webots 6 是机器人仿真器 Webots 从 5.x 走向现代架构的关键转折版本系列(2008 年末至 2012 年初&#…

2026/10/14 15:09:51 阅读更多 →
9款AI论文工具实测:MBA毕业论文全流程效率提升指南

9款AI论文工具实测:MBA毕业论文全流程效率提升指南

又快到了MBA毕业论文的开题季,每年这个时候总有一批同学在选题、文献、数据、格式之间反复拉扯。我去年陪跑了三位在职MBA同学,从开题到盲审全程跟下来,发现一个特别明显的规律:论文写得顺不顺,跟你每天投入多少小时关…

2026/10/14 15:09:51 阅读更多 →
Flutter for OpenHarmony 弹窗开发指南:从选型封装到真机避坑

Flutter for OpenHarmony 弹窗开发指南:从选型封装到真机避坑

把 Flutter for OpenHarmony 这条路走通之后,我发现最容易出交互事故的不是页面转场,而是弹窗与对话框(Dialog)。一个对话框里的 context 用错,轻则点击没反应,重则整页卡在遮罩后面;上下文交互…

2026/10/14 15:09:51 阅读更多 →
2016数学建模A题系泊系统:MATLAB静力平衡求解与打靶法实现

2016数学建模A题系泊系统:MATLAB静力平衡求解与打靶法实现

简介:这份资源为2016年全国数学建模竞赛高教杯A题的MATLAB实现代码包,面向参赛学生、建模爱好者以及需要学习MATLAB数值计算与优化编程的读者。压缩包体积仅6KB,共9个文件,均为.m源码,涵盖目标函数定义、约束处理、熵权…

2026/10/14 15:09:51 阅读更多 →
永久免费不限次:P2P直连文件同步工具的原理与实操指南

永久免费不限次:P2P直连文件同步工具的原理与实操指南

看到“永久免费不限次”这个标题点进来的人,我猜十有八九都跟我一样,被市面上各种“限速、限流、限设备”的套路搞烦了。这个标题背后指向的东西,说白了就是一款我们日常几乎离不开的工具:跨平台文件同步与分享工具。但“永久免费…

2026/10/14 15:09:51 阅读更多 →
Python编程核心优势与工程实践指南

Python编程核心优势与工程实践指南

1. 为什么Python值得你投入时间?如果你已经掌握C/Java这类静态语言,第一次接触Python时可能会产生"这也算编程语言?"的疑惑。没有类型声明、没有分号、甚至没有大括号,这种极简风格正是Python的设计哲学。我在2010年从J…

2026/10/14 15:08:50 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →