实现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实现Smtplib发送带有各种附件的邮件实例
Jun 05 Python
python机器人行走步数问题的解决
Jan 29 Python
python调用Matplotlib绘制分布点并且添加标签
May 31 Python
Python嵌套列表转一维的方法(压平嵌套列表)
Jul 03 Python
Python3字符串encode与decode的讲解
Apr 02 Python
numpy中的ndarray方法和属性详解
May 27 Python
python虚拟环境完美部署教程
Aug 06 Python
使用OpCode绕过Python沙箱的方法详解
Sep 03 Python
np.newaxis 实现为 numpy.ndarray(多维数组)增加一个轴
Nov 30 Python
Python类和实例的属性机制原理详解
Mar 21 Python
Python求区间正整数内所有素数之和的方法实例
Oct 13 Python
理解python中装饰器的作用
Jul 21 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
20个2014年最优秀的PHP框架回顾
2014/10/22 PHP
php处理抢购类功能的高并发请求
2018/02/08 PHP
javascript之典型高阶函数应用介绍
2013/01/10 Javascript
jQuery不间断滚动效果(模拟百度新闻支持文字/图片/垂直滚动)
2013/02/05 Javascript
jquery实现的随机多彩tag标签随机颜色和字号大小效果
2014/03/27 Javascript
jquery实现点击label的同时触发文本框点击事件的方法
2015/06/05 Javascript
js控制文本框输入的字符类型方法汇总
2015/06/19 Javascript
JavaScript使用简单正则表达式的数据验证功能示例
2017/01/13 Javascript
NodeJs的fs读写删除移动监听
2017/04/28 NodeJs
vue.js中mint-ui框架的使用方法
2017/05/12 Javascript
AngularJS  ng-repeat遍历输出的用法
2017/06/19 Javascript
修改 bootstrap table 默认detailRow样式的实例代码
2017/07/21 Javascript
使用angularjs.foreach时return的问题解决
2018/09/30 Javascript
vue.js购物车添加商品组件的方法
2019/09/17 Javascript
浅谈python配置与使用OpenCV踩的一些坑
2018/04/02 Python
TensorFlow实现非线性支持向量机的实现方法
2018/04/28 Python
Python堆排序原理与实现方法详解
2018/05/11 Python
django模板结构优化的方法
2019/02/28 Python
在win10和linux上分别安装Python虚拟环境的方法步骤
2019/05/09 Python
pygame实现俄罗斯方块游戏(对战篇1)
2019/10/29 Python
python base64库给用户名或密码加密的流程
2020/01/02 Python
pycharm无法导入本地模块的解决方式
2020/02/12 Python
Python2.6版本pip安装步骤解析
2020/08/17 Python
英国门把手公司:Door Handle Company
2019/05/12 全球购物
生物科学专业个人求职信范文
2013/12/07 职场文书
合作协议书格式
2014/08/19 职场文书
校运动会广播稿300字
2014/10/07 职场文书
电子银行业务授权委托书
2014/10/10 职场文书
教师群众路线教育实践活动个人对照检查材料
2014/11/04 职场文书
2014年结对帮扶工作总结
2014/12/17 职场文书
学雷锋日活动总结
2015/02/06 职场文书
惊涛骇浪观后感
2015/06/05 职场文书
有关骆驼祥子的读书笔记
2015/06/26 职场文书
重阳节主题班会
2015/08/17 职场文书
Python中如何处理常见报错
2022/01/18 Python
CSS子盒子水平和垂直居中的五种方法
2022/07/23 HTML / CSS