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

力扣hot100:轮转数组(常规思路与三步反转讲解)(189)

轮转数组问题要求将数组元素向右移动 k 个位置,尾部元素移动到数组头部。本文讲解一种时间复杂度 O(n)、空间复杂度 O(1) 的优雅解法——三步反转算法。

 问题描述

 常见误区

正常思路
class Solution {public void rotate(int[] nums, int k) {int n = nums.length;int[] newArr = new int[n];for (int i = 0; i < n; ++i) {newArr[(i + k) % n] = nums[i];}System.arraycopy(newArr, 0, nums, 0, n);}
}

三步反转算法(最优解)

核心思想

通过三次反转实现轮转:

  1. 整体反转:将整个数组倒序排列。
  2. 反转前 k 个元素:恢复轮转后应位于数组头部元素的顺序。
  3. 反转剩余元素:恢复轮转后位于数组尾部的元素的顺序。
图解过程(以 nums = [1,2,3,4,5,6,7]k=3 为例)
步骤操作结果
原始数组-[1,2,3,4,5,6,7]
整体反转(0 → n-1首尾交换[7,6,5,4,3,2,1]
反转前 k 个(0 → k-1恢复头部顺序[5,6,7,4,3,2,1]
反转剩余部分(k → n-1恢复尾部顺序[5,6,7,1,2,3,4]
️ 关键细节:处理 k 过大

k 超过数组长度,需取模:k = k % nums.length原因:轮转 n 次后数组恢复原状,有效轮转次数为 k mod n

代码实现

class Solution {public void rotate(int[] nums, int k) {k=k%nums.length;swap1(nums,0,nums.length-1);swap1(nums,0,k-1);swap1(nums,k, nums.length-1);}private void swap1(int[] nums, int i, int length) {while(i<length){int temp=nums[i];nums[i]=nums[length];nums[length]=temp;i++;length--;}}
}

⏱ 复杂度分析

步骤时间复杂度空间复杂度
整体反转O(n)O(1)
前 k 个反转O(k)O(1)
剩余部分反转O(n-k)O(1)
总计O(n)O(1)

对比额外空间解法(使用新数组): 时间复杂度 O(n),但空间复杂度 O(n)。

三步反转法是空间最优解。

 总结

三步反转法的核心在于逆向思维:

  1. 整体反转打破原有顺序;
  2. 分段反转精准定位轮转后的子数组位置。 此方法高效且代码简洁,是解决数组轮转问题的首选方案。掌握后,类似旋转问题(如字符串旋转)均可触类旁通 。
http://www.xdnf.cn/news/19382.html

相关文章:

  • mmaction安装的详细说明帖
  • 王立群《读史记-刘邦》读书笔记
  • 嵌入式C学习笔记之编码规范
  • 数学分析原理答案——第七章 习题12
  • AI大模型实战解析-RAG知识库+LangChain项目实战
  • Linux系统的进程管理
  • Unity3D Gizmos 调试可视化
  • Qt中UDP回显服务器和客户端
  • 第二十七天-ADC模数转换实验
  • python反转字符串
  • 三维重建模型、3DGS、nerf、 mip-nerf
  • 《WINDOWS 环境下32位汇编语言程序设计》第9章 通用控件(2)
  • 点接触混合润滑完整数值解
  • 免税商品优选购物商城系统|java技术开发
  • MATLAB R2010b系统环境(三)MATLAB操作界面
  • JavaWeb01
  • 【Linux】创建线程
  • 基于K8s部署Redis高可用
  • mit6.031软件构造 笔记 Testing
  • Redis进阶(上)
  • Win11输入法异常解决方案
  • 智能合约安全全解析:常见漏洞、真实案例与防范实践
  • 机器视觉学习-day14-绘制图像轮廓
  • 【机器学习基础】监督学习算法的现代理解:从经典方法到无人驾驶与生成式AI的实践应用
  • [光学原理与应用-353]:ZEMAX - 设置 - 可视化工具:2D视图、3D视图、实体模型三者的区别,以及如何设置光线的数量
  • 财务的三张报表:现金流表、利润表、资产负债表
  • Spring/Spring MVC/iBATIS 应用 HTTP 到 HTTPS 迁移技术方案
  • 基于i.MX6ULL的RAM Disk驱动开发
  • 【开题答辩全过程】以 付费自习室系统小程序为例,包含答辩的问题和答案
  • 【编号186】中国劳动统计年鉴(1991-2023)