博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode#189 Rotate Array
阅读量:5152 次
发布时间:2019-06-13

本文共 1173 字,大约阅读时间需要 3 分钟。

Problem Definition:

  Rotate an array of n elements to the right by k steps.

  For example, with n = 7 and k = 3, the array [1,2,3,4,5,6,7] is rotated to [5,6,7,1,2,3,4].

  Note:

  Try to come up as many solutions as you can, there are at least 3 different ways to solve this problem.

  Hint:

  Could you do it in-place with O(1) extra space?

 

Solution 1:最简单粗暴的,每次右移一个坑,移k次。空间复杂度是O(1),然并软,超时。

1 def rotate(nums, k): 2     n=len(nums) 3     if n==0: 4         return 5     while k>0: 6         rear=nums[n-1] 7         for i in range(n-1,0,-1): 8             nums[i]=nums[i-1] 9         nums[0]=rear10         k-=1

 

Solution 2: 动用一个临时数组来存放数组前面一部分,空间复杂度 O(n-k)。

1 def rotate(self, nums, k):2     n=len(nums)3     k=k%n   #一点优化,含n个数的数组,移动n次相当于没移动4     nums[:k],nums[k:]=nums[n-k:n],nums[:n-k]

 

Solution 3 (硬菜): 不需要临时数组,空间复杂度O(1),三次反转。

  一个栗子: nums=[1,2,3,4,5]  k=2

        [1,2,3,  |  4,5]  --> 

                  [3,2,1  |  4,5]  --> 

                             [3,2,1  |  5,4]  -->

                                        [4,5,1,2,3]

1 #辅助函数,将数组nums中下标start到end的子数组反转 2 def reverse(nums,start,end): 3     # space O(1) 4     while start

 

转载于:https://www.cnblogs.com/acetseng/p/4658747.html

你可能感兴趣的文章
【Java】使用Eclipse进行远程调试,Linux下开启远程调试
查看>>
js对象属性方法
查看>>
对Vue为什么不支持IE8的解释之一
查看>>
使用easyUI 为datagrid冻结列
查看>>
bzoj 2784: [JLOI2012]时间流逝【树形期望dp】
查看>>
利用Git版本控制管理你的项目
查看>>
windows下使用pycharm开发基于ansible api的python程序
查看>>
错误 warning: LF will be replaced by CRLF in README.md.
查看>>
博客园修改鼠标图标样式
查看>>
LInux CentOS7 vsftpd 配置注释
查看>>
Linux CentOS7 httpd 配置注释
查看>>
Sqlserver2012 评估期已过问题
查看>>
关于jquery attr()与prop() 的区别
查看>>
C#调用C++DLL/天地伟业解码器二次开发
查看>>
zend framework 1 连接oracle数据库的写法
查看>>
APUE学习笔记:第九章 进程关系
查看>>
关于 阿里云 的linux 安装 jdk和tomcat 中的问题(解压版的jdk和tomcat)
查看>>
Logstash_Apache日志采集
查看>>
使用localStorage保存搜索记录
查看>>
PHP队列
查看>>