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

189.轮转数组

思路

先观察,如果k等于n,相等于啥都没做。所以先对k=k%n,得到真实的k
然后发现其实是索引-k到最后移动到前面,其余部分移动到后面,所以就有

nums[:] = nums[-k:]+nums[:-k]

这里的nums必须用切片形式,

nums[:] = … → 修改原数组的内容(in-place)。

nums = … → 改变了 nums 这个变量的指向,原数组没动。

这是野路子,正规做法是翻转法

翻转法

首先全部反转,然后根据k值,分别反转前后部分

class Solution:def rotate(self, nums: List[int], k: int) -> None:"""Do not return anything, modify nums in-place instead."""n = len(nums)k = k % ndef reverse(i,j):while i < j:nums[i],nums[j] = nums[j],nums[i]i += 1j -= 1reverse(0,n-1)reverse(0,k-1)reverse(k,n-1)

复杂度

O(n)

数学原理

翻转有一个重要性质:

(AB)^R = B^R A^R

即:整体翻转等于子数组分别翻转后顺序交换。
这里的 ^R 表示翻转。

第一次整体翻转,把“相对顺序颠倒”

第二次翻转前半段,恢复 A 的顺序

第三次翻转后半段,恢复 B 的顺序

http://www.dtcms.com/a/341558.html

相关文章:

  • 设计模式的一些笔记
  • list集合可以一边遍历一遍修改元素吗?
  • Rust 入门 包 (二十一)
  • 计算机网络基础复习
  • 【数据分享】295个地级市互联网用户、邮电业务数据(2001-2022)
  • win10安装最新docker 4.44.2版图文教程(2025版)
  • 3.Shell脚本修炼手册之---Shell 变量基础知识
  • Android动画小补充
  • 【Obsidian插件】HiNote
  • 爬虫项目实践之淘宝商品详情数据采集​||电商API接口
  • 结构化 OCR 技术:破解各类检测报告信息提取难题
  • 5.Kotlin作用于函数let、run、with、apply、also
  • SpringCloud微服务架构入门指南
  • Day12--滑动窗口与双指针--2762. 不间断子数组,LCP 68. 美观的花束,2743. 计算没有重复字符的子字符串数量
  • day075-MySQL数据库服务安装部署与基础服务管理命令
  • Unity 开源分享一个轻量路点编辑器插件 常用于对象寻路
  • 在IDEA中DEBUG调试时查看MyBatis-Plus动态生成的SQL语句
  • 数据结构:AVL 树
  • RHCA05-文件系统调优
  • Spark学习
  • 游戏本不插电源适配器不卡设置教程
  • 技术半衰期悖论:AI时代“不可替代领域“的深耕地图
  • 30.Linux cobbler自动化部署
  • 生物信息学深度学习模型比较与学习框架
  • chrome插件开发(一)
  • 23TaskExecutor初始化
  • Windows 命令行:dir 命令
  • MyBatis 动态查询语句详解:让 SQL 更灵活可控
  • 前端调用阿里云接口语音合成演示
  • 20人团队文件共享选哪款?群晖DS925+ 和 DS1525+深度对比