当前位置: 首页 > 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.lryc.cn/news/626849.html

相关文章:

  • Linux多线程——线程池
  • Dubbo 的 Java 项目间调用的完整示例
  • 新手向:Python实现文件加密解密工具
  • 【java面试day16】mysql-覆盖索引
  • 害虫检测识别数据集:近4K图像,6类,yolo标注
  • 【CocosCreator】electron/Cocos双窗口本地模拟聊天系统
  • Spring事务源码
  • PyTorch API 1
  • 【数据结构】递归与非递归:归并排序全解析
  • 第一章:认识 CAD 图形文件 —— DXF 格式
  • 车载软件架构 --- 赢得汽车软件开发竞赛
  • 好家园房产中介网后台管理完整(python+flask+mysql)
  • Scikit-learn 预处理函数分类详解
  • 【Task02】:四步构建简单rag(第一章3节)
  • 第R6周:LSTM实现糖尿病探索与预测
  • 深度学习核心技巧与实战指南
  • 机器学习中的数据处理技巧
  • Node.js中的Prisma应用:现代数据库开发的最佳实践
  • 关联规则挖掘3:Eclat算法——等价类转换(Equivalence Class Transformation)
  • Simulink实现RELS递推最小二乘算法
  • 【机器学习】什么是损失景观(Loss Landscape)?
  • 漏扫 js 里面包含一些敏感内容 利用二进制加密 保持原始内容不变 又能过漏扫
  • 亚马逊蓝海掘金:以需供比为锚点的精准选品策略
  • 高压柜无线测温:给智能化配电室装上“智能体温监测仪”
  • Leetcode 深度优先搜索 (11)
  • C语言---分隔符、常量、注释、标识符、关键字、空格
  • 笔试——Day44
  • 域名加白怎么做
  • 实战:本地大模型+function Calling,获取北京天气
  • 保姆级Debezium抽取SQL Server同步kafka