首页 / 知识
Python3实现旋转数组的3种算法
2023-11-12 13:46:00
下面是Python3实现的旋转数组的3种算法。
一、题目
给定一个数组,将数组中的元素向右移动k个位置,其中k是非负数。
例如:
输入:[1,2,3,4,5,6,7]和k=3
输出:[5,6,7,1,2,3,4]
解释:
向右旋转1步:[7,1,2,3,4,5,6]
向右旋转2步:[6,7,1,2,3,4,5]
向右旋转3步:[5,6,7,1,2,3,4]
说明:
1.尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。
2.要求使用空间复杂度为O(1)的原地算法。
二、解题算法
解法一
以倒数第k个值为分界线,把nums截成两组再组合。因为k可能大于nums的长度(当这两者相等的时候,就相当于nums没有移动),所以我们取k%len(nums),k和nums的长度取余,就是最终我们需要移动的位置
代码如下:
ifnums:
k=k%len(nums)
nums[:]=nums[-k:]+nums[:-k]
时间:64ms
假设:
nums=[1,2,3,4,5,6,7]
k=3
运行结果:
[5,6,7,1,2,3,4]
解法二
先把nums最后一位移动到第一位,然后删除最后一位,循环k次。k=k%len(nums),取余
代码如下:
ifnums:
k=k%len(nums)
whilek>0:
k-=1
nums.insert(0,nums[-1])
nums.pop()
时间:172ms
假设:
nums=[1,2,3,4,5,6,7]
k=3
运行结果:
[5,6,7,1,2,3,4]
解法三
先把nums复制到old_nums,然后nums中索引为x的元素移动k个位置后,当前索引为x+k,其值为old_nums[x]。,所以我们把x+k处理成(x+k)%len(nums),取余操作,减少重复的次数。
代码如下:
ifnums:
old_nums=nums[:]
l=len(nums)
forxinrange(l):
nums[(x+k)%l]=old_nums[x]
时间:64ms
假设:
nums=[1,2,3,4,5,6,7]
k=3
运行结果:
[5,6,7,1,2,3,4]
以上内容为大家介绍了Python3实现旋转数组的3种算法,希望对大家有所帮助,如果想要了解更多Python相关知识,请关注我们http://www.mobiletrain.org/
最新内容
相关内容
linux获取命令行结果?
linux获取命令行结果?,系统,信息,工作,地址,设备,命令,软件,环境,目录,文件,Linux命令1、linux系统常用操作命令如下:ls:全拼list,功能是列出目录linux命令行查看时间?
linux命令行查看时间?,系统,时间,信息,环境,命令,地址,服务,工作,情况,用户数,linux查看系统运行了多长时间使用什么命令方法一:uptime命令 会linux系统命令改时间?
linux系统命令改时间?,时间,系统,服务,大陆,国家,基础,城市,命令,时区,时钟,如何在Linux中更改时区1、方法2:使用时区选择菜单打开终端应用程序linux命令行看代码?
linux命令行看代码?,代码,基础,系统,命令,数字,工作,情况,进程,程序,终端,在Linux命令终端中查看和编辑曾执行过的命令1、使用历史命令:在终端linux命令代码怎么看?
linux命令代码怎么看?,时间,系统,代码,命令,状态,工具,情况,电脑,实时,基础,linux查看系统命令是什么有的,Linux中有多个命令可以用于查看文件比较好用的Python代码编辑器
比较好用的Python代码编辑器,代码,平台,环境,培训,教育,设计,数据,办公,人员,分析,Python是一款非常简单的编程语言,其功能使用起来都十分方便pycharm无法输入代码?
pycharm无法输入代码?,代码,环境,工具,分析,输入法,键盘,性能,计算机,问题,版本,PyCharm是一款Python语言开发的集成开发环境(IDE),它是许多PythoPython常用时间模块有哪些?
Python常用时间模块有哪些?,时间,信息,模块,培训,代码,灵活,字符串,日期,小时,实例,在编写代码的过程中,我们经常需要与时间打交道,所以说掌握时让Python代码更易维护的工具
让Python代码更易维护的工具,代码,工具,标准,项目,质量,地方,更正,一致,变动,软件,检查你的代码的质量,通过这些外部库使其更易维护。可读性很大学生报名Python培训课程的好处是
大学生报名Python培训课程的好处是什么?,培训,企业,社会,项目,行业,工作,时间,技术,都会,素养,一、报名学习前沿技术在IT行业,技术在不断变化和python代码的规范建议
python代码的规范建议,代码,异常,二元,设计,数字,下降,一致,培训,标准,空行,1.一致性的建议打破一条既定规则的两个好理由当应用这个规则将导线上Python培训和线下有什么不同?
线上Python培训和线下有什么不同?,培训,基础,实战,电脑,项目,教育,时间,地方,初级,技术,学习互联网技术的人越来越多,很多机构都采取线上和线下