实现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解析html开发库pyquery使用方法
Feb 07 Python
Python实现提取文章摘要的方法
Apr 21 Python
Python中random模块用法实例分析
May 19 Python
python2.7实现邮件发送功能
Dec 12 Python
python中多个装饰器的调用顺序详解
Jul 16 Python
python脚本之一键移动自定格式文件方法实例
Sep 02 Python
使用Django搭建一个基金模拟交易系统教程
Nov 18 Python
使用Python进行防病毒免杀解析
Dec 13 Python
Python3 main函数使用sys.argv传入多个参数的实现
Dec 25 Python
Python中文分词库jieba,pkusegwg性能准确度比较
Feb 11 Python
pycharm远程连接vagrant虚拟机中mariadb数据库
Jun 05 Python
pytorch常用数据类型所占字节数对照表一览
May 17 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
PHP4实际应用经验篇(7)
2006/10/09 PHP
php中函数前加&符号的作用分解
2014/07/08 PHP
PHP大文件分割上传 PHP分片上传
2017/08/28 PHP
Mozilla 表达式 __noSuchMethod__
2009/04/05 Javascript
clientX,pageX,offsetX,x,layerX,screenX,offsetLeft区别分析
2010/03/12 Javascript
jQuery循环滚动展示代码 可应用到文字和图片上
2012/05/11 Javascript
javascript全局变量封装模块实现代码
2012/11/28 Javascript
javascript数组的使用
2013/03/28 Javascript
让JavaScript中setTimeout支持链式操作的方法
2015/06/19 Javascript
javascript常用的设计模式
2017/02/09 Javascript
JS触摸事件、手势事件详解
2017/05/04 Javascript
微信小程序实现鼠标拖动效果示例
2017/12/01 Javascript
webpack之引入图片的实现及问题
2018/10/08 Javascript
记录一次开发微信网页分享的步骤
2019/05/07 Javascript
解析vue、angular深度作用选择器
2019/09/11 Javascript
使用Python的Flask框架构建大型Web应用程序的结构示例
2016/06/04 Python
Python最火、R极具潜力 2017机器学习调查报告
2017/12/11 Python
Python实现购物车购物小程序
2018/04/18 Python
pygame游戏之旅 添加icon和bgm音效的方法
2018/11/21 Python
Python OpenCV 使用滑动条来调整函数参数的方法
2019/07/08 Python
python中的global关键字的使用方法
2019/08/20 Python
Django 简单实现分页与搜索功能的示例代码
2019/11/07 Python
PyTorch的torch.cat用法
2020/06/28 Python
python把一个字符串切开的实例方法
2020/09/27 Python
详解canvas绘图时遇到的跨域问题
2018/03/22 HTML / CSS
在校生党员自我评价
2013/09/25 职场文书
酒店公关部经理岗位职责
2013/11/24 职场文书
教师党员思想汇报
2014/01/06 职场文书
电子信息科学专业自荐信
2014/01/30 职场文书
计算机求职自荐信范文
2014/04/19 职场文书
环保倡议书范文
2014/05/12 职场文书
大学生标准自荐书
2014/06/15 职场文书
2014年终工作总结范本
2014/12/15 职场文书
村党总支部公开承诺书2016
2016/03/25 职场文书
简历自我评价:教师师德表现自我评价
2019/04/24 职场文书
Python基础之元类详解
2021/04/29 Python