实现Python3数组旋转的3种算法实例


Posted in Python onSeptember 16, 2020

Python3实现旋转数组的3种算法

下面是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 的长度取余,就是最终我们需要移动的位置

代码如下:

if nums:
  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) ,取余

代码如下:

if nums:
  k = k % len(nums)
  while k > 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),取余操作,减少重复的次数。

代码如下:

if nums:
  old_nums = nums[:]
  l = len(nums)
  for x in range(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种算法实例的文章就介绍到这了,更多相关3种算法实现Python3数组的旋转内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python中List的sort方法指南
Sep 01 Python
Python加pyGame实现的简单拼图游戏实例
May 15 Python
PYTHON压平嵌套列表的简单实现
Jun 08 Python
python学习入门细节知识点
Mar 29 Python
python 定时修改数据库的示例代码
Apr 08 Python
用python处理图片之打开\显示\保存图像的方法
May 04 Python
在Pycharm中设置默认自动换行的方法
Jan 16 Python
Falsk 与 Django 过滤器的使用与区别详解
Jun 04 Python
Django ORM实现按天获取数据去重求和例子
May 18 Python
python自动化测试三部曲之request+django实现接口测试
Oct 07 Python
Manjaro、pip、conda更换国内源的方法
Nov 17 Python
这样写python注释让代码更加的优雅
Jun 02 Python
Python私有属性私有方法应用实例解析
Sep 15 #Python
PyQt5多线程防卡死和多窗口用法的实现
Sep 15 #Python
PyQt5结合matplotlib绘图的实现示例
Sep 15 #Python
pycharm激活方法到2099年(激活流程)
Sep 22 #Python
pycharm专业版远程登录服务器的详细教程
Sep 15 #Python
深入浅析pycharm中 Make available to all projects的含义
Sep 15 #Python
pycharm-professional-2020.1下载与激活的教程
Sep 21 #Python
You might like
PHP中函数内引用全局变量的方法
2008/10/20 PHP
探讨PHP中this,self,parent的区别详解
2013/06/08 PHP
PHP 获取远程文件大小的3种解决方法
2013/07/11 PHP
PHP面向对象之旅:深入理解static变量与方法
2014/01/06 PHP
PHP判断浏览器、判断语言代码分享
2015/03/05 PHP
JavaScript 模仿vbs中的 DateAdd() 函数的代码
2007/08/13 Javascript
使用js获取地址栏中传递的值
2013/07/02 Javascript
javascript放大镜效果的简单实现
2013/12/09 Javascript
js调试工具Console命令详解
2014/10/21 Javascript
javascript文件加载管理简单实现方法
2015/07/25 Javascript
select隐藏选中值对应的id,显示其它id的简单实现方法
2016/08/25 Javascript
jQuery实现弹出带遮罩层的居中浮动窗口效果
2016/09/12 Javascript
基于JS+Canves实现点击按钮水波纹效果
2016/09/15 Javascript
vue实现一个移动端屏蔽滑动的遮罩层实例
2017/06/08 Javascript
分分钟学会vue中vuex的应用(入门教程)
2017/09/14 Javascript
详解Web使用webpack构建前端项目
2017/09/23 Javascript
JS实现表单中点击小眼睛显示隐藏密码框中的密码
2020/04/13 Javascript
详解微信小程序动画Animation执行过程
2020/09/23 Javascript
vue移动端下拉刷新和上滑加载
2020/10/27 Javascript
通过滑动翻页效果实现和移动端click事件问题
2021/01/26 Javascript
[01:24:34]2014 DOTA2华西杯精英邀请赛5 24 DK VS LGD
2014/05/25 DOTA
Python实现的使用telnet登陆聊天室实例
2015/06/17 Python
python with提前退出遇到的坑与解决方案
2018/01/05 Python
Python判断对象是否相等及eq函数的讲解
2019/02/25 Python
使用python matploblib库绘制准确率,损失率折线图
2020/06/16 Python
浅谈Keras的Sequential与PyTorch的Sequential的区别
2020/06/17 Python
在CentOS7下安装Python3教程解析
2020/07/09 Python
python3实现简单飞机大战
2020/11/29 Python
学习自我鉴定
2014/02/01 职场文书
小学生安全演讲稿
2014/04/25 职场文书
营销计划书
2015/01/17 职场文书
项目经理助理岗位职责
2015/04/13 职场文书
大学生暑假实习总结
2015/07/13 职场文书
2015年计算机教师工作总结
2015/07/22 职场文书
python实现简易自习室座位预约系统
2021/06/30 Python
Python可视化神器pyecharts绘制地理图表
2022/07/07 Python