news 2026/5/2 21:36:30

普通数组----轮转数组

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
普通数组----轮转数组

🔥个人主页:Milestone-里程碑

❄️个人专栏: <<力扣hot100>> <<C++>><<Linux>>

<<Git>><<MySQL>>

🌟心向往之行必能至

题目描述

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

示例 1输入:nums = [1,2,3,4,5,6,7],k = 3输出:[5,6,7,1,2,3,4]解释:向右轮转 3 步后,数组末尾的 3 个元素移动到了数组开头。

示例 2输入:nums = [-1,-100,3,99],k = 2输出:[3,99,-1,-100]


解法一:使用额外数组(直观易懂)

这是最容易想到的方法,通过一个临时数组来存储轮转后的结果,再拷贝回原数组。

思路

  1. 计算有效轮转步数x = k % nums.size(),避免 k 大于数组长度时的无效轮转。
  2. 创建临时数组temp,将原数组的后x个元素和前n-x个元素依次放入。
  3. 将临时数组的内容拷贝回原数组。

代码

cpp

void rotate(vector<int>& nums, int k) { int n = nums.size(); int x = k % n; vector<int> temp(n); for (int i = 0; i < n; ++i) { temp[(i + x) % n] = nums[i]; } nums = temp; }

复杂度分析

  • 时间复杂度:\(O(n)\),遍历一次数组。
  • 空间复杂度:\(O(n)\),需要额外的临时数组存储结果。

解法二:三次反转(原地算法,最优解)

这是这道题的最优解法,不需要额外空间,仅通过三次反转操作就可以完成轮转。

思路

  1. 计算有效步数x = k % nums.size(),处理 k 大于数组长度的情况。
  2. 第一次反转:将整个数组反转。
  3. 第二次反转:将数组的前x个元素反转。
  4. 第三次反转:将数组的剩余n-x个元素反转。

示例演示(以nums = [1,2,3,4,5,6,7],k=3为例)

  • 原数组:[1,2,3,4,5,6,7]
  • 整体反转:[7,6,5,4,3,2,1]
  • 反转前 3 个:[5,6,7,4,3,2,1]
  • 反转后 4 个:[5,6,7,1,2,3,4]

代码

cpp

#include <vector> #include <algorithm> using namespace std; class Solution { public: void rotate(vector<int>& nums, int k) { int n = nums.size(); int x = k % n; if (x == 0) return; // 1. 反转整个数组 reverse(nums.begin(), nums.end()); // 2. 反转前x个元素 reverse(nums.begin(), nums.begin() + x); // 3. 反转剩余元素 reverse(nums.begin() + x, nums.end()); } };

复杂度分析

  • 时间复杂度:\(O(n)\),三次反转操作的总时间为 \(O(n)\)。
  • 空间复杂度:\(O(1)\),仅使用常量级的额外空间。

解法三:环状替换(原地算法,进阶思路)

这是另一种原地算法,通过计算每个元素的目标位置,以环状的方式进行元素替换。

思路

  1. 计算有效步数x = k % nums.size()
  2. 从起始位置开始,将当前元素放到它轮转后的目标位置,再将目标位置的元素放到它的目标位置,直到回到起始位置。
  3. 如果一轮替换没有覆盖所有元素,则从下一个位置开始重复上述过程。

复杂度分析

  • 时间复杂度:\(O(n)\),每个元素只被移动一次。
  • 空间复杂度:\(O(1)\),仅使用常量级的额外空间。

三种解法对比

解法时间复杂度空间复杂度特点
额外数组\(O(n)\)\(O(n)\)思路简单,容易实现,但需要额外空间
三次反转\(O(n)\)\(O(1)\)最优解,原地操作,代码简洁高效
环状替换\(O(n)\)\(O(1)\)原地操作,但逻辑
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 11:05:48

ClickHouse 索引优化:提升大数据查询速度的秘诀

ClickHouse 索引优化&#xff1a;提升大数据查询速度的秘诀 关键词&#xff1a;ClickHouse、索引优化、大数据查询、稀疏索引、数据分区、数据排序、查询优化 摘要&#xff1a;本文深入解析ClickHouse索引体系的核心原理&#xff0c;通过稀疏索引、数据分区、排序键设计等关键技…

作者头像 李华
网站建设 2026/4/25 15:03:23

Qwen3-ASR-1.7B快速上手:音频时长限制与分段处理策略

Qwen3-ASR-1.7B快速上手&#xff1a;音频时长限制与分段处理策略 1. 引言 语音识别技术正在改变我们处理音频内容的方式。Qwen3-ASR-1.7B作为阿里通义千问推出的端到端语音识别模型&#xff0c;凭借其17亿参数和多语言支持能力&#xff0c;为开发者提供了强大的离线转写工具。…

作者头像 李华
网站建设 2026/4/21 4:20:52

AI头像生成器技术揭秘:深度学习模型架构解析

AI头像生成器技术揭秘&#xff1a;深度学习模型架构解析 1. 从一张照片到惊艳头像&#xff1a;我们到底在用什么技术 你有没有试过上传一张普通自拍照&#xff0c;几秒钟后就得到一张专业级的肖像&#xff1f;不是简单地加滤镜&#xff0c;而是连发丝纹理、皮肤质感、光影层次…

作者头像 李华
网站建设 2026/4/27 13:13:55

Shadow Sound Hunter人工智能模型核心架构解析

Shadow & Sound Hunter人工智能模型核心架构解析 1. 这个模型到底能做什么 第一次看到Shadow & Sound Hunter这个名字&#xff0c;很多人会好奇&#xff1a;这名字听起来像电影里的特工代号&#xff0c;但它其实是一个专注于多模态感知与生成的人工智能模型。简单来说…

作者头像 李华
网站建设 2026/4/17 18:58:35

Z-Image-Turbo孙珍妮LoRA效果展示:动态姿势与自然肢体比例生成

Z-Image-Turbo孙珍妮LoRA效果展示&#xff1a;动态姿势与自然肢体比例生成 1. 模型简介与部署 Z-Image-Turbo孙珍妮LoRA是基于Z-Image-Turbo模型开发的特殊版本&#xff0c;专注于生成具有动态姿势和自然肢体比例的人物图像。该模型通过LoRA&#xff08;Low-Rank Adaptation&…

作者头像 李华
网站建设 2026/4/29 9:37:37

cv_resnet50_face-reconstruction模型在不同硬件平台上的性能对比

cv_resnet50_face-reconstruction模型在不同硬件平台上的性能对比 1. 这个模型到底能做什么 很多人第一次看到cv_resnet50_face-reconstruction这个名字&#xff0c;可能会被一长串字符吓到。其实它干的是一件很直观的事&#xff1a;给你一张普通的人脸照片&#xff0c;就能生…

作者头像 李华