news 2026/4/30 9:11:28

轮转数组(面试最优解法)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
轮转数组(面试最优解法)

题目:

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


解题思路分析:

(1)问题理解:

将数组向右轮转 k 个位置:比如数组 [1,2,3,4,5,6,7],k=3,轮转后结果是 [5,6,7,1,2,3,4]。

(2) 关键优化:

k 可能大于数组长度,实际有效轮转位数是 k % 数组长度(比如数组长度 7,k=10,等价于 k=3)。

(3)最优解法: 三次反转法(时间 O (n),空间 O (1),原地修改)


详细步骤:

1、反转整个数组,2、反转前K个元素,3、反转剩余元素(从K到末尾)

eg:(nums=[1,2,3,4,5,6,7],k = 3)

1、反转整个数组[7,6,5,4,3,2,1]

2、反转前3个元素[5,6,7,4,3,2,1]

3、反转后四个元素[5,6,7,1,2,3,4]


代码展示:

class Solution { public void rotate(int[] nums, int k) { // 边界判断:数组为空/长度为1/k为0,直接返回 if (nums == null || nums.length <= 1 || k == 0) { return; } int n = nums.length; // 计算有效轮转位数(k可能大于数组长度) k = k % n; // 三次反转核心逻辑 reverse(nums, 0, n - 1); // 1. 反转整个数组 reverse(nums, 0, k - 1); // 2. 反转前k个元素 reverse(nums, k, n - 1); // 3. 反转从k开始的剩余元素 } // 辅助方法:反转数组中[start, end]区间的元素 private void reverse(int[] nums, int start, int end) { while (start < end) { // 交换两个位置的元素 int temp = nums[start]; nums[start] = nums[end]; nums[end] = temp; start++; end--; } } }

运行结果:


代码说明

  1. 边界处理:空数组、长度为 1、k=0 时直接返回,避免无效操作。
  2. 有效 k 计算k = k % n解决 k 大于数组长度的问题。
  3. 反转函数:双指针交换元素,实现区间反转。
  4. 测试用例:覆盖了常规数组、负数数组场景,可直接运行验证。

总结

  1. 三次反转法:原地修改、空间复杂度 O (1),面试首选;
  2. 额外数组法:逻辑简单、空间复杂度 O (n),适合新手理解;
  3. 核心优化:k 必须取模数组长度,避免无效轮转。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/30 9:09:41

【VS Code MCP插件生态架构白皮书】:20年IDE架构师亲授从零搭建高兼容、可扩展、易维护的MCP服务层(含4层抽象设计图+3大协议适配范式)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;VS Code MCP插件生态搭建手册 MCP 协议与 VS Code 集成原理 MCP&#xff08;Model Context Protocol&#xff09;是面向大模型工具调用的开放协议&#xff0c;VS Code 通过官方语言服务器协议&#xf…

作者头像 李华
网站建设 2026/4/30 9:09:23

3步完成Axure RP界面中文化:从英文障碍到流畅设计体验的全面转型

3步完成Axure RP界面中文化&#xff1a;从英文障碍到流畅设计体验的全面转型 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 面对…

作者头像 李华
网站建设 2026/4/30 9:09:20

ESPTool 深度解析与实战指南:掌握 ESP 芯片烧录的核心技术

ESPTool 深度解析与实战指南&#xff1a;掌握 ESP 芯片烧录的核心技术 【免费下载链接】esptool Serial utility for flashing, provisioning, and interacting with Espressif SoCs 项目地址: https://gitcode.com/gh_mirrors/es/esptool 如果你正在开发 ESP8266、ESP3…

作者头像 李华
网站建设 2026/4/30 9:02:27

Sunshine终极指南:如何5步搭建你的个人云游戏服务器

Sunshine终极指南&#xff1a;如何5步搭建你的个人云游戏服务器 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine Sunshine是一款开源的自托管游戏串流服务器&#xff0c;专为Moonli…

作者头像 李华