实现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采用requests库模拟登录和抓取数据的简单示例
Jul 05 Python
简单解决Python文件中文编码问题
Nov 22 Python
python魔法方法-属性访问控制详解
Jul 25 Python
利用Python脚本实现ping百度和google的方法
Jan 24 Python
解决Python print 输出文本显示 gbk 编码错误问题
Jul 13 Python
python实现连续图文识别
Dec 18 Python
python实现剪切功能
Jan 23 Python
django框架模板语言使用方法详解
Jul 18 Python
浅谈图像处理中掩膜(mask)的意义
Feb 19 Python
Python flask路由间传递变量实例详解
Jun 03 Python
Python调用百度OCR实现图片文字识别的示例代码
Jul 17 Python
Python极值整数的边界探讨分析
Sep 15 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
jquery 图片截取工具jquery.imagecropper.js
2010/04/09 Javascript
JS弹出窗口代码大全(详细整理)
2012/12/21 Javascript
在javascript中关于节点内容加强
2013/04/11 Javascript
jQuery随机切换图片的小例子
2013/04/18 Javascript
Javascript闭包用法实例分析
2015/01/23 Javascript
浅谈JavaScript异常处理语句
2015/06/26 Javascript
AngularJS中实现动画效果的方法
2016/07/28 Javascript
vue中渐进过渡效果实现
2016/10/27 Javascript
jQuery 插件封装的方法
2016/11/16 Javascript
VSCode配置react开发环境的步骤
2017/12/27 Javascript
js实现简单模态框实例
2018/11/16 Javascript
vue中路由跳转不计入history的操作
2020/09/21 Javascript
[04:52]2015国际邀请赛LGD战队晋级之路
2015/08/14 DOTA
轻松实现TensorFlow微信跳一跳的AI
2018/01/05 Python
python读取中文txt文本的方法
2018/04/12 Python
django rest framework 数据的查找、过滤、排序的示例
2018/06/25 Python
Python正则表达式匹配日期与时间的方法
2019/07/07 Python
python IDLE 背景以及字体大小的修改方法
2019/07/12 Python
linux下python中文乱码解决方案详解
2019/08/28 Python
Pytorch训练过程出现nan的解决方式
2020/01/02 Python
如何表示python中的相对路径
2020/07/08 Python
Python爬虫之Selenium鼠标事件的实现
2020/12/04 Python
Python爬虫之Selenium多窗口切换的实现
2020/12/04 Python
python中count函数知识点浅析
2020/12/17 Python
HTML5语音识别标签写法附图
2013/11/18 HTML / CSS
汽车电子与维修专业大学生求职信
2013/09/28 职场文书
学前教育学生自荐信范文
2013/12/31 职场文书
采购经理岗位职责
2014/02/16 职场文书
保险专业大学生职业规划书
2014/03/03 职场文书
宣传保护环境的公益广告词
2014/03/13 职场文书
企业金融服务方案
2014/06/03 职场文书
《中国梦我的梦》小学生演讲稿
2014/08/20 职场文书
索赔员岗位职责
2015/02/15 职场文书
2019邀请函格式及范文
2019/05/20 职场文书
Python批量将csv文件转化成xml文件的实例
2021/05/10 Python
一文弄懂MySQL索引创建原则
2022/02/28 MySQL