实现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构造icmp echo请求和实现网络探测器功能代码分享
Jan 10 Python
Python字符串处理之count()方法的使用
May 18 Python
Python使用面向对象方式创建线程实现12306售票系统
Dec 24 Python
Python读写txt文本文件的操作方法全解析
Jun 26 Python
Python读取一个目录下所有目录和文件的方法
Jul 15 Python
Python3多进程 multiprocessing 模块实例详解
Jun 11 Python
Python3.4 splinter(模拟填写表单)使用方法
Oct 13 Python
PyQt QListWidget修改列表项item的行高方法
Jun 20 Python
Python创建数字列表的示例
Nov 28 Python
使用python实现数组、链表、队列、栈的方法
Dec 20 Python
Pycharm及python安装详细步骤及PyCharm配置整理(推荐)
Jul 31 Python
Python requests模块安装及使用教程图解
Jun 30 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
使用TinyButStrong模板引擎来做WEB开发
2007/03/16 PHP
thinkPHP5.0框架URL访问方法详解
2017/03/18 PHP
php实现的错误处理封装类实例
2017/06/20 PHP
PHP7下协程的实现方法详解
2017/12/17 PHP
php反射学习之不用new方法实例化类操作示例
2019/06/14 PHP
用javascript实现的仿Flash广告图片轮换效果
2007/04/24 Javascript
关于eval 与new Function 到底该选哪个?
2013/04/17 Javascript
跨域传值即主页面与iframe之间互相传值
2013/12/09 Javascript
通过设置CSS中的position属性来固定层的位置
2015/12/14 Javascript
学习JavaScript设计模式之状态模式
2016/01/08 Javascript
关于JavaScript和jQuery的类型判断详解
2016/10/08 Javascript
jquery Form轻松实现文件上传
2017/05/24 jQuery
浅谈Angular路由复用策略
2017/10/04 Javascript
JS原生带缩略图的图片切换效果
2018/10/10 Javascript
个人小程序接入支付解决方案
2019/05/23 Javascript
Vue快速实现通用表单验证的示例代码
2020/01/09 Javascript
vue vant中picker组件的使用
2020/11/03 Javascript
[01:00]DOTA2 store: Collection of Artisan's Wonders
2015/08/12 DOTA
python使用smtplib模块通过gmail实现邮件发送的方法
2015/05/08 Python
在Django的模型中添加自定义方法的示例
2015/07/21 Python
用python做一个搜索引擎(Pylucene)的实例代码
2017/07/05 Python
Python之Scrapy爬虫框架安装及使用详解
2017/11/16 Python
python 使用raw socket进行TCP SYN扫描实例
2020/05/05 Python
IE9对HTML5中部分属性不支持的原因分析
2014/10/15 HTML / CSS
网络维护中文求职信
2014/01/03 职场文书
师德个人剖析材料
2014/02/02 职场文书
五四青年节优秀演讲稿范文
2014/05/28 职场文书
真诚的求职信
2014/07/04 职场文书
电子商务优秀毕业生求职信
2014/07/11 职场文书
法定代表人授权委托书范文
2014/08/02 职场文书
放飞梦想演讲稿600字
2014/08/26 职场文书
社保转移委托书范本
2014/10/08 职场文书
师德师风个人整改措施
2014/10/27 职场文书
优秀团员自我评价
2015/03/10 职场文书
Python Pandas pandas.read_sql_query函数实例用法分析
2021/06/21 Python
业余无线电通联Q语
2022/02/18 无线电