实现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中的25个隐藏特性
Mar 30 Python
Python基于DES算法加密解密实例
Jun 03 Python
Python函数中的函数(闭包)用法实例
Mar 15 Python
Python的Django REST框架中的序列化及请求和返回
Apr 11 Python
Mac中升级Python2.7到Python3.5步骤详解
Apr 27 Python
Python实现PS滤镜特效之扇形变换效果示例
Jan 26 Python
Python全栈之列表数据类型详解
Oct 01 Python
keras的backend 设置 tensorflow,theano操作
Jun 30 Python
基于python判断字符串括号是否闭合{}[]()
Sep 21 Python
爬虫代理的cookie如何生成运行
Sep 22 Python
python中把元组转换为namedtuple方法
Dec 09 Python
Python卷积神经网络图片分类框架详解分析
Nov 07 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设计模式中的工厂模式
2008/06/12 PHP
解析Ubuntu下crontab命令的用法
2013/06/24 PHP
CI框架中site_url()和base_url()的区别
2015/01/07 PHP
PHP按指定键值对二维数组进行排序的方法
2015/12/22 PHP
php类自动装载、链式操作、魔术方法实现代码
2017/07/23 PHP
php模拟post提交请求调用接口示例解析
2020/08/07 PHP
JS处理VBArray的函数使用说明
2008/05/11 Javascript
jquery 学习之二 属性 文本与值(text,val)
2010/11/25 Javascript
javascript 星级评分效果(手写)
2012/12/24 Javascript
jquery实现图片渐变切换兼容ie6/Chrome/Firefox
2013/08/02 Javascript
编写js扩展方法判断一个数组中是否包含某个元素
2013/11/08 Javascript
javascript实现获取cookie过期时间的变通方法
2014/08/14 Javascript
jQuery实现的产品自动360度旋转展示特效源码分享
2015/08/21 Javascript
jQuery手指滑动轮播效果
2016/12/22 Javascript
JS+CSS实现下拉刷新/上拉加载插件
2017/03/31 Javascript
jQuery扇形定时器插件pietimer使用方法详解
2017/07/18 jQuery
vue中各组件之间传递数据的方法示例
2017/07/27 Javascript
Web开发使用Angular实现用户密码强度判别的方法
2017/09/27 Javascript
解析vue中的$mount
2017/12/21 Javascript
手把手教你写一个微信小程序(推荐)
2018/10/17 Javascript
vue中导出Excel表格的实现代码
2018/10/18 Javascript
js实现拾色器插件(ColorPicker)
2020/05/21 Javascript
Python3.6简单操作Mysql数据库
2017/09/12 Python
python列表的增删改查实例代码
2018/01/30 Python
python+selenium打印当前页面的titl和url方法
2018/06/22 Python
python将一组数分成每3个一组的实例
2018/11/14 Python
CSS3教程(4):网页边框和网页文字阴影
2009/04/02 HTML / CSS
香港万宁官方海外旗舰店:香港健与美连锁店
2018/09/27 全球购物
如何在Oracle中查看各个表、表空间占用空间的大小
2015/10/31 面试题
资产经营总监岗位职责范文
2013/12/01 职场文书
演讲比赛获奖感言
2014/02/02 职场文书
高中物理教学反思
2014/02/08 职场文书
2014红色之旅心得体会
2014/10/07 职场文书
2015年教师节贺卡寄语
2015/03/24 职场文书
创业计划书之酒店
2019/08/30 职场文书
彩虹社八名人气艺人全新周边限时推出,性转女装男装一次拥有!
2022/04/01 日漫