实现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通过BF算法实现关键词匹配的方法
Mar 13 Python
python统计文本字符串里单词出现频率的方法
May 26 Python
Python学习之用pygal画世界地图实例
Dec 07 Python
Python实战小程序利用matplotlib模块画图代码分享
Dec 09 Python
python实现图片识别汽车功能
Nov 30 Python
利用nohup来开启python文件的方法
Jan 14 Python
python之信息加密题目详解
Jun 26 Python
Python socket非阻塞模块应用示例
Sep 12 Python
python GUI库图形界面开发之PyQt5切换按钮控件QPushButton详细使用方法与实例
Feb 28 Python
Python如何使用bokeh包和geojson数据绘制地图
Mar 21 Python
Python通过文本和图片生成词云图
May 21 Python
浅析python中特殊文件和特殊函数
Feb 24 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开发过程中常用函数收藏
2009/12/14 PHP
PHP可逆加密/解密函数分享
2012/09/25 PHP
高性能PHP框架Symfony2经典入门教程
2014/07/08 PHP
Yii2中关联查询简单用法示例
2016/08/10 PHP
Js切换功能的简单方法
2010/11/23 Javascript
javascript中attribute和property的区别详解
2014/06/05 Javascript
JavaScript fontsize方法入门实例(按照指定的尺寸来显示字符串)
2014/10/17 Javascript
jQuery实现流动虚线框的方法
2015/01/29 Javascript
详解jQuery UI库中文本输入自动补全功能的用法
2016/04/23 Javascript
深入学习TypeScript 、React、 Redux和Ant-Design的最佳实践
2019/06/17 Javascript
JavaScript实现切换多张图片
2021/01/27 Javascript
[03:48]DOTA2完美大师赛主赛事第二日精彩集锦
2017/11/24 DOTA
[50:38]DOTA2-DPC中国联赛 正赛 Phoenix vs CDEC BO3 第二场 3月7日
2021/03/11 DOTA
Python入门篇之条件、循环
2014/10/17 Python
python数据结构之链表详解
2017/09/12 Python
python操作excel文件并输出txt文件的实例
2018/07/10 Python
python3爬虫学习之数据存储txt的案例详解
2019/04/24 Python
在python中画正态分布图像的实例
2019/07/08 Python
python实现大量图片重命名
2020/03/23 Python
python numpy 矩阵堆叠实例
2020/01/17 Python
python 安装库几种方法之cmd,anaconda,pycharm详解
2020/04/08 Python
css3制作动态进度条以及附加jQuery百分比数字显示
2012/12/13 HTML / CSS
简单总结CSS3中视窗单位Viewport的常见用法
2016/02/04 HTML / CSS
Joe Fresh官网:加拿大时尚品牌和零售连锁店
2016/11/30 全球购物
澳大利亚先进的皮肤和激光诊所购物网站:Soho Skincare
2018/10/15 全球购物
市场营销专业推荐信
2013/11/03 职场文书
网络事业创业计划书范文
2014/01/09 职场文书
幼儿园户外活动总结
2014/07/04 职场文书
中学生关于梦想的演讲稿
2014/08/22 职场文书
企业公益活动策划方案
2014/08/24 职场文书
党的群众路线教育实践活动个人对照检查材料(企业)
2014/11/05 职场文书
民间借贷纠纷起诉书
2015/08/03 职场文书
详解MySQL的Seconds_Behind_Master
2021/05/18 MySQL
Arthas排查Kubernetes中应用频繁挂掉重启异常
2022/02/28 MySQL
Go语言特点及基本数据类型使用详解
2022/03/21 Golang
SQL Server使用T-SQL语句批处理
2022/05/20 SQL Server