实现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 相关文章推荐
Windows系统下使用flup搭建Nginx和Python环境的方法
Dec 25 Python
Python+MongoDB自增键值的简单实现
Nov 04 Python
基于Python的XSS测试工具XSStrike使用方法
Jul 29 Python
JSONLINT:python的json数据验证库实例解析
Nov 28 Python
python多行字符串拼接使用小括号的方法
Mar 19 Python
pytorch 数据集图片显示方法
Jul 26 Python
Pycharm 实现下一个文件引用另外一个文件的方法
Jan 17 Python
django中账号密码验证登陆功能的实现方法
Jul 15 Python
python plotly绘制直方图实例详解
Jul 22 Python
python安装读取grib库总结(推荐)
Jun 24 Python
python批量修改交换机密码的示例
Sep 22 Python
python中__slots__节约内存的具体做法
Jul 04 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制作静态网站的模板框架
2006/10/09 PHP
php输出含有“#”字符串的方法
2017/01/18 PHP
php连接MSsql server的五种方法总结
2018/03/04 PHP
JS 统计时间
2021/03/09 Javascript
枚举JavaScript对象的函数
2006/12/22 Javascript
parseInt parseFloat js字符串转换数字
2010/08/01 Javascript
js防止表单重复提交实现代码
2012/09/05 Javascript
JS判断对象是否存在的10种方法总结
2013/12/23 Javascript
网页广告中JS代码的信息监听示例
2014/04/02 Javascript
JavaScript判断文件上传类型的方法
2014/09/02 Javascript
JQuery选中checkbox方法代码实例(全选、反选、全不选)
2015/04/27 Javascript
jQuery+CSS实现一个侧滑导航菜单代码
2016/05/09 Javascript
MUI实现上拉加载和下拉刷新效果
2017/06/30 Javascript
详解webpack 打包文件体积过大解决方案(code splitting)
2018/04/10 Javascript
浅谈ECMAScript 中的Array类型
2019/06/10 Javascript
使用easyui从servlet传递json数据到前端页面的两种方法
2019/09/05 Javascript
解决vue v-for src 图片路径问题 404
2019/11/12 Javascript
element-ui如何防止重复提交的方法步骤
2019/12/09 Javascript
vant picker+popup 自定义三级联动案例
2020/11/04 Javascript
python中的内置函数getattr()介绍及示例
2014/07/20 Python
Python 的描述符 descriptor详解
2016/02/27 Python
Python栈算法的实现与简单应用示例
2017/11/01 Python
书单|人生苦短,你还不用python!
2017/12/29 Python
Python文件监听工具pyinotify与watchdog实例
2018/10/15 Python
python 获取微信好友列表的方法(微信web)
2019/02/21 Python
Python利用itchat库向好友或者公众号发消息的实例
2019/02/21 Python
Numpy 中的矩阵求逆实例
2019/08/26 Python
Django实现文件上传下载
2019/10/06 Python
使用pyqt5 tablewidget 单元格设置正则表达式
2019/12/13 Python
详解python百行有效代码实现汉诺塔小游戏(简约版)
2020/10/30 Python
ReVive利维肤美国官网:RéVive Skincare
2018/04/18 全球购物
自动一体化专业求职信
2014/03/15 职场文书
党的群众路线教育实践活动整改方案
2014/10/28 职场文书
安全责任书
2015/01/29 职场文书
退休教师追悼词
2015/06/23 职场文书
2019求职信大礼包
2019/05/15 职场文书