【LeetCode 热题 100】189. 轮转数组——(解法一)额外数组

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

文章目录

  • 整体思路
  • 完整代码
  • 时空复杂度
    • 时间复杂度:O(N)
    • 空间复杂度:O(N)

整体思路

这段代码旨在解决一个经典的数组问题:旋转数组 (Rotate Array)。问题要求将一个数组中的元素向右循环移动 k 个位置。例如,将 [1, 2, 3, 4, 5] 向右移动 2 位,结果应为 [4, 5, 1, 2, 3]

该实现采用了一种非常直观的方法:使用一个额外的数组来辅助完成旋转。其逻辑步骤清晰明了:

  1. 处理 k

    • 首先,代码对 k 进行了取模运算 k = k % n。这是非常重要的一步,因为如果 k 大于数组长度 n,旋转 k 位和旋转 k % n 位的效果是完全相同的。例如,旋转 n 位等于没有旋转。这可以处理 k 为任意非负整数的情况。
  2. 创建辅助数组

    • 创建一个与原数组 nums 等长的新数组 ans。这个数组将用来临时存放旋转后的结果。
  3. 构建旋转后的数组

    • 算法将原数组 nums 分为两部分来处理:
      a. k 个元素:这部分元素在旋转后会移动到新数组的开头。代码通过 for (int i = n - k; i < n; i++) 循环,将 nums 的后 k 个元素(从索引 n-kn-1)依次复制到 ans 数组的开头(从索引 0 开始)。
      b. n-k 个元素:这部分元素在旋转后会紧跟在上面那部分元素的后面。代码通过 for (int i = 0; i < n - k; i++) 循环,将 nums 的前 n-k 个元素(从索引 0n-k-1)依次复制到 ans 数组的剩余位置。
    • 一个 cur 指针被用来无缝地追踪 ans 数组中下一个要填充的位置。
  4. 将结果复制回原数组

    • ans 数组完全构建好后,它里面就存储了正确的旋转结果。
    • 最后,通过一个循环 for (int i = 0; i < n; i++),将 ans 数组中的所有元素逐一复制回原数组 nums 中,以满足题目通常要求的“原地修改”。

总而言之,这是一个逻辑简单、易于理解但空间效率不高的解法。

完整代码

class Solution {/*** 将数组 nums 的元素向右循环移动 k 个位置。* @param nums 要旋转的整数数组* @param k 非负整数,表示移动的位数*/public void rotate(int[] nums, int k) {// 获取数组的长度int n = nums.length;// 创建一个等长的辅助数组 ans,用于存储旋转后的结果int[] ans = new int[n];// cur 指针,用于追踪在 ans 数组中当前要填充的索引位置int cur = 0;// 步骤 1: 对 k 取模,处理 k >= n 的情况。// 旋转 k 位和旋转 k % n 位的效果是一样的。k = k % n;// 步骤 2: 将原数组的后 k 个元素复制到新数组的开头// 这部分元素是从索引 n-k 到 n-1for (int i = n - k; i < n; i++) {ans[cur++] = nums[i];}// 步骤 3: 将原数组的前 n-k 个元素复制到新数组的剩余位置// 这部分元素是从索引 0 到 n-k-1for (int i = 0; i < n - k; i++) {ans[cur++] = nums[i];}// 步骤 4: 将新数组 ans 的内容复制回原数组 nums// 以满足原地修改的要求for (int i = 0; i < n; i++) {nums[i] = ans[i];}}
}

时空复杂度

时间复杂度:O(N)

  1. 取模运算k = k % n 是 O(1) 操作。
  2. 第一个复制循环for (int i = n - k; i < n; i++) 执行 k 次。
  3. 第二个复制循环for (int i = 0; i < n - k; i++) 执行 n-k 次。
    • 这两个循环合起来,总共对 nums 数组进行了一次完整的遍历,将元素复制到 ans。总操作次数是 k + (n-k) = n
  4. 第三个复制循环for (int i = 0; i < n; i++) 执行 n 次,将 ans 的内容复制回 nums
  5. 综合分析
    • 算法总共执行了大约 n + n = 2n 次的元素复制操作。
    • 因此,总的时间复杂度是线性的,即 O(N)

空间复杂度:O(N)

  1. 主要存储开销:算法创建了一个名为 ans 的整型数组来作为辅助存储空间。
  2. 空间大小:该数组的长度与输入数组 nums 的长度 N 相同。
  3. 其他变量n, cur, k, i 等变量都只占用常数级别的空间,即 O(1)。

综合分析
算法所需的额外空间主要由辅助数组 ans 决定。因此,其空间复杂度为 O(N)。这是一个非原地(not-in-place)的算法。

【LeetCode 热题 100】189. 轮转数组——(解法二)反转数组

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/87490.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/87490.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【PyCharm 2025.1.2配置debug】

大家先看下我的配置 1.调试配置 选择 FastAPI 框架名称-》 自定义应用程序文件&#xff1a;必须选择当前项目的main.pyUvicorn 选项&#xff1a;这是启动命令&#xff0c;有第三步的选择 main.py 所以只需要–reload即可&#xff0c;如果想自定义启动端口补充–port xxxxPytho…

Python数据库软件:查询与预测功能集成系统

Python数据库软件:查询与预测功能集成系统 概述 本文将详细介绍一个具备查询和模型预测功能的Python数据库软件的设计与实现。该系统基于Python开发,使用Excel作为数据存储格式,包含约15个功能页面,支持数据管理、查询分析、模型预测等核心功能。 系统架构 技术栈 核心…

什么是持续集成/持续交付(CI/CD)?

基本概念 CI/CD旨在通过自动化流程提高代码质量、加快发布速度 CI &#xff08;Continuous Integration&#xff0c;持续集成&#xff09;CD&#xff08;Continuous Delivery/Deployment&#xff0c;持续交付/持续部署&#xff09; CI 持续集成 目标 频繁加粗样式将代码合…

核弹级漏洞

CVE-2025-6018 漏洞介绍&#xff1a; 该漏洞是Linux PAM&#xff08;可插拔认证模块&#xff09;中的一个本地权限提升漏洞&#xff0c;主要存在于openSUSE Leap 15和SUSE Linux Enterprise 15的PAM配置中。由于PAM规则错误地将检查条件设置为用户存在SSH或TTY会话&#xff0c…

LabVIEW自动扶梯振动监测

利用LabVIEW开发平台构建自动扶梯机械振动数据采集系统&#xff0c;实现驱动主机、减速器、梯级等关键部位的振动信号实时采集、频谱分析、数据存储及故障特征提取。系统通过加速度传感器与高速数据采集卡的协同工作&#xff0c;结合 LabVIEW 图形化编程的高效数据处理能力&…

PTA最少交换次数

最少交换次数 分数 15 作者 計科G隊長 单位 重庆大学 长度为N的数组中只有1&#xff0c;2&#xff0c;3三种值&#xff0c;要按升序排序&#xff0c;并且只能通过数值间的两两交换实现不能移位。比如某项竞赛的优胜者按金银铜牌排序&#xff0c;或者荷兰国旗问题都是该问题…

LiteHub中间件之跨域访问CORS

跨域访问CORS 原理基本概念简单请求非简单请求&#xff08;预检请求&#xff09; 代码实现服务器端Cors的关键配置服务端解析预检请求服务端填充响应 抓包分析 原理 基本概念 在浏览器安全模型中&#xff0c;同源策略是最重要的安全基石。 一个“域”是由3个要素组成的&#…

FastAPI开发教程

FastAPI 是一个现代、高性能的 Python Web 框架&#xff0c;专为构建 APIs 设计。它基于 Python 类型提示&#xff0c;支持异步编程&#xff0c;并提供自动生成的交互式文档&#xff08;Swagger UI 和 ReDoc&#xff09;。以下是 FastAPI 开发的核心指南&#xff1a; 1. 安装 …

基于Spring Boot + MyBatis-Plus + Thymeleaf的评论管理系统深度解析

你好呀&#xff0c;我是小邹。 个人博客系统日渐完善&#xff0c;现在的文章评论以及留言数量逐渐增多&#xff0c;所以今天重构了管理后台的评论列表&#xff08;全量查询 -> 分页条件搜索&#xff09;。 示例图 网页端手机端一、系统架构设计与技术选型 系统采用前后端分离…

sqlmap学习笔记ing(1.Easy_SQLi(时间,表单注入))

题解 根据题目提示&#xff0c;应为SQL注入&#xff0c;题目页面只有一个表单&#xff0c;用sqlmap进行表单注入。 使用--forms参数进行自动化表单注入&#xff0c;逐步得到flag。 ### 总结参数作用&#xff1a; -u 指定目标URL。 -C 指定列名&#xff08;多个…

SciPy 安装使用教程

一、SciPy 简介 SciPy&#xff08;Scientific Python&#xff09;是基于 NumPy 的开源科学计算库&#xff0c;提供了数值积分、优化、信号处理、线性代数、统计分析等高级科学计算功能。它是构建 Python 科学计算生态系统的核心组件之一&#xff0c;常用于科研、工程、数据分析…

【AI大模型】通义大模型与现有企业系统集成实战《CRM案例分析与安全最佳实践》

简介&#xff1a; 本文档详细介绍了基于通义大模型的CRM系统集成架构设计与优化实践。涵盖混合部署架构演进&#xff08;新增向量缓存、双通道同步&#xff09;、性能基准测试对比、客户意图分析模块、商机预测系统等核心功能实现。同时&#xff0c;深入探讨了安全防护体系、三…

如何进行需求全周期管理

实现高效的需求全周期管理&#xff0c;应从以下五个方面入手&#xff1a;1、建立系统化需求来源渠道、2、设置清晰的评审与优先级策略、3、加强执行过程的协同与跟踪、4、闭环需求验收与上线反馈、5、构建长期的需求知识沉淀机制。 其中&#xff0c;“加强执行过程的协同与跟踪…

热传导方程能量分析与边界条件研究

题目 问题 10. (a) 考虑热传导方程在 J = ( − ∞ , ∞ ) J = (-\infty, \infty) J=(−∞,∞) 上,证明“能量” E ( t ) = ∫ J u 2 ( x , t ) d x E(t) = \int_{J} u^{2}(x,t) dx E(t)=∫J​u2(x,t)dx (8) 不增加;进一步证明,除非 u ( x , t ) = 常数 u(x,t) = \text{常…

【AI News | 20250702】每日AI进展

AI Repos 1、LLM-RL-Visualized 提供100余张原创架构图&#xff0c;全面涵盖了 LLM (大语言模型)、VLM (视觉语言模型) 等大模型技术。内容深度解析了训练算法&#xff08;如 RL、RLHF、GRPO、DPO、SFT、CoT 蒸馏等&#xff09;、效果优化策略&#xff08;如 RAG、CoT&#xf…

安徽省企业如何做信创产品认证?信创认证流程与费用详解

安徽省作为长三角一体化发展的重要成员&#xff0c;正大力推进信息技术应用创新&#xff08;信创&#xff09;产业发展。依托合肥“中国声谷”、芜湖机器人及智能装备基地等产业集群&#xff0c;以及省内对信创产业的政策扶持&#xff0c;企业通过信创认证后&#xff0c;能更好…

百度文心 ERNIE 4.5 开源:开启中国多模态大模型开源新时代

百度文心 ERNIE 4.5 开源&#xff1a;开启中国多模态大模型开源新时代 随着DeepSeek-R1的横空出示&#xff0c;越来越多大公司开始开源模型&#xff0c;像DeepSeek R1发布的时候Kimi同步开源了技术文档&#xff0c;随着R1推动着思维链推理技术的发展&#xff0c;开源社区也出现…

22、企业项目管理(Project)全体系构建:从基础框架到智能防呆的完整解决方案

项目管理能力——企业VUCA战略落地的核心枢纽 在VUCA&#xff08;乌卡时代&#xff0c;即VUCA时代&#xff0c;是指人们生活在一个不稳定性、不确定性、复杂性、模糊性的时代、境况或者世界中。vuca是volatility&#xff08;易变性VUCA&#xff09;&#xff0c;uncertainty&am…

分布式定时任务:Elastic-Job-Lite

Elastic-Job-Lite 是一款由 Apache 开源的轻量级分布式任务调度框架&#xff0c;属于 ShardingSphere 生态体系的一部分。它专注于分布式任务调度&#xff0c;支持弹性伸缩、分片处理、高可用等特性&#xff0c;且不依赖中心化架构。 一、基础 &#xff08;一&#xff09;核心特…

记录一次生产环境ActiveMQ无法启动的问题

这次遇到一个问题&#xff0c;是ActiveMQ无法启动的&#xff0c;跟以往的现象不一样。这次是在服务器重启后出异常。 1、启动ActiveMQ时提示&#xff1a;activemq/data/kahadb/db.data&#xff08;输入输出错误&#xff09;&#xff0c;NotFoundFileException异常 2、想着不应该…