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

力扣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.dtcms.com/a/360531.html

相关文章:

  • C#基础(②音乐播发器MCI(Media Control Interface))
  • CMake⼯程指南-3
  • 手写MyBatis第45弹:动态代理在MyBatis插件内核是如何织入扩展逻辑的
  • Linux软件升级方法总结
  • CF每日3题(1500-1600)
  • 在windows系统下安装Docker Desktop后迁移镜像位置
  • 科普:requirements.txt 和 environment.yml
  • 【系统分析师】高分论文:论面向服务方法在信息系统开发中的应用
  • 一些八股总结
  • Langflow Agents 技术深度分析
  • OpenCL C 平台与设备
  • (附源码)基于Vue的教师档案管理系统的设计与实现
  • 【开题答辩全过程】以 基于Java的网络购物平台设计与实现为例,包含答辩的问题和答案
  • LeetCode 3665. 统计镜子反射路径数目
  • react-virtualized React 应用中高效渲染大型列表和表格数据的库
  • Synchronized 概述
  • 【LeetCode】18、四数之和
  • LeeCode 37. 解数独
  • 并发编程——10 CyclicBarrier的源码分析
  • Selenium 等待机制:编写稳定可靠的自动化脚本
  • spi总线
  • 7.2elementplus的表单布局与模式
  • MCP SDK 学习二
  • 艾体宝案例 | 数据驱动破局:DOMO 如何重塑宠物零售门店的生存法则
  • Python 2025:AI代理、Rust与异步编程的新时代
  • 张柏芝亮相林家谦演唱会 再次演绎《任何天气》
  • Spring MVC 九大组件源码深度剖析(五):HandlerAdapter - 处理器的执行引擎
  • 三、环境搭建之Docker安装mysql
  • 一、计算机系统知识
  • Springcloud-----Nacos