实现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聊天程序实例代码分享
Nov 18 Python
python中的多重继承实例讲解
Sep 28 Python
python使用BeautifulSoup分页网页中超链接的方法
Apr 04 Python
利用Python中的mock库对Python代码进行模拟测试
Apr 16 Python
简单了解什么是神经网络
Dec 23 Python
python设置值及NaN值处理方法
Jul 03 Python
Python实现简单石头剪刀布游戏
Jan 20 Python
在python plt图表中文字大小调节的方法
Jul 08 Python
python中Lambda表达式详解
Nov 20 Python
浅谈Python 参数与变量
Jun 20 Python
Python 带星号(* 或 **)的函数参数详解
Feb 23 Python
python 实现体质指数BMI计算
May 26 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
全国FM电台频率大全 - 10 江苏省
2020/03/11 无线电
PHP中的多行字符串传递给JavaScript的两种方法
2014/06/19 PHP
php动态变量定义及使用
2015/06/10 PHP
WordPress的文章自动添加关键词及关键词的SEO优化
2016/03/01 PHP
JavaScript 浮点数运算 精度问题
2009/10/06 Javascript
jQuery中bind与live的用法及区别小结
2014/01/27 Javascript
简单的jquery左侧导航栏和页面选中效果
2014/08/21 Javascript
使用js实现的简单拖拽效果
2015/03/18 Javascript
Angular2 (RC4) 路由与导航详解
2016/09/21 Javascript
纯JS实现表单验证实例
2016/12/24 Javascript
VUE JS 使用组件实现双向绑定的示例代码
2017/01/10 Javascript
JavaScript基于activexobject连接远程数据库SQL Server 2014的方法
2017/07/12 Javascript
五步轻松实现zTree的使用
2017/11/01 Javascript
javascript获取图片的top N主色值方法详解
2018/01/26 Javascript
layui-tree实现Ajax异步请求后动态添加节点的方法
2019/09/23 Javascript
[35:43]2018DOTA2亚洲邀请赛 4.1 小组赛B组 paiN vs Effect
2018/04/03 DOTA
深入理解python try异常处理机制
2016/06/01 Python
Python 从相对路径下import的方法
2018/12/04 Python
Python any()函数的使用方法
2019/10/28 Python
pytorch中nn.Conv1d的用法详解
2019/12/31 Python
解决flask接口返回的内容中文乱码的问题
2020/04/03 Python
在spyder IPython console中,运行代码加入参数的实例
2020/04/20 Python
Python实现验证码识别
2020/06/15 Python
matplotlib基础绘图命令之imshow的使用
2020/08/13 Python
Python 多线程C段扫描、检测 Ping扫描脚本的实现
2020/09/03 Python
Python os库常用操作代码汇总
2020/11/03 Python
香港草莓网:Strawberrynet香港
2019/05/10 全球购物
跟单文员的岗位职责
2013/11/14 职场文书
老师对学生的评语
2014/04/18 职场文书
投标人廉洁自律承诺书
2014/05/26 职场文书
开票证明
2015/06/23 职场文书
感谢信
2019/04/11 职场文书
Python基础之条件语句详解
2021/06/16 Python
OpenCV 图像梯度的实现方法
2021/07/25 Python
springboot中的pom文件 project报错问题
2022/01/18 Java/Android
InterProcessMutex实现zookeeper分布式锁原理
2022/03/21 Java/Android