实现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 相关文章推荐
详解pyqt5 动画在QThread线程中无法运行问题
May 05 Python
Python 统计字数的思路详解
May 08 Python
Python自动发送邮件的方法实例总结
Dec 08 Python
Python功能点实现:函数级/代码块级计时器
Jan 02 Python
关于python下cv.waitKey无响应的原因及解决方法
Jan 10 Python
python面试题小结附答案实例代码
Apr 11 Python
利用anaconda作为python的依赖库管理方法
Aug 13 Python
Python3使用PySynth制作音乐的方法
Sep 09 Python
基于python traceback实现异常的获取与处理
Dec 13 Python
python pycharm最新版本激活码(永久有效)附python安装教程
Sep 18 Python
Python如何实现邮件功能
May 27 Python
keras中的History对象用法
Jun 19 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
Ajax+PHP实现的分类列表框功能示例
2019/02/11 PHP
excel操作之Add Data to a Spreadsheet Cell
2007/06/12 Javascript
JavaScript导出Excel实例详解
2014/11/25 Javascript
基于JS实现textarea中获取动态剩余字数的方法
2016/05/25 Javascript
Bootstrap布局之栅格系统详解
2016/06/13 Javascript
vue开发心得和技巧分享
2016/10/27 Javascript
微信小程序中显示html格式内容的方法
2017/04/25 Javascript
详解vue前后台数据交互vue-resource文档
2017/07/19 Javascript
Angularjs 事件指令详细整理
2017/07/27 Javascript
微信小程序获取音频时长与实时获取播放进度问题
2018/08/28 Javascript
javascript对HTML字符转义与反转义
2018/12/13 Javascript
解决pycharm双击但是无法打开的情况
2020/10/31 Javascript
整理Python 常用string函数(收藏)
2016/05/30 Python
spyder常用快捷键(分享)
2017/07/19 Python
python实现简单中文词频统计示例
2017/11/08 Python
Python机器学习之决策树算法实例详解
2017/12/06 Python
Python+OpenCV实现图像融合的原理及代码
2018/12/03 Python
Pycharm配置远程调试的方法步骤
2018/12/17 Python
python GUI库图形界面开发之PyQt5打开保存对话框QFileDialog详细使用方法与实例
2020/02/27 Python
Python IDLE或shell中切换路径的操作
2020/03/09 Python
解决python便携版无法直接运行py文件的问题
2020/09/01 Python
Python中qutip用法示例详解
2020/10/02 Python
python statsmodel的使用
2020/12/21 Python
发现两个有趣的CSS3动画效果
2013/08/14 HTML / CSS
BLACKMORES澳洲官网:澳大利亚排名第一的保健品牌
2018/09/27 全球购物
注塑工厂厂长岗位职责
2013/12/02 职场文书
大学同学十年聚会感言
2014/02/21 职场文书
市场营销管理毕业生自荐信
2014/03/03 职场文书
2014年小学教师工作自我评价
2014/09/22 职场文书
2014年秘书工作总结
2014/11/25 职场文书
龙门石窟导游词
2015/02/02 职场文书
房地产公司工程部经理岗位职责
2015/04/09 职场文书
建党伟业观后感
2015/06/01 职场文书
学长教您写论文:经验总结
2019/07/09 职场文书
Python基础之数据类型知识汇总
2021/05/18 Python
详解解Django 多对多表关系的三种创建方式
2021/08/23 Python