实现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 EOL while scanning string literal问题解决方法
Sep 18 Python
使用Python处理BAM的方法
Sep 28 Python
pyqt5 键盘监听按下enter 就登陆的实例
Jun 25 Python
使用python爬取抖音视频列表信息
Jul 15 Python
numpy.random.shuffle打乱顺序函数的实现
Sep 10 Python
Python socket非阻塞模块应用示例
Sep 12 Python
Django框架model模型对象验证实现方法分析
Oct 02 Python
tensorflow 固定部分参数训练,只训练部分参数的实例
Jan 20 Python
Python GUI编程学习笔记之tkinter界面布局显示详解
Mar 30 Python
python各种excel写入方式的速度对比
Nov 10 Python
Pytorch中使用ImageFolder读取数据集时忽略特定文件
Mar 23 Python
Python自动化实战之接口请求的实现
May 30 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
超神学院:鹤熙已踏入神圣领域,实力不比凯莎弱
2020/03/02 国漫
几种有用的变型 PHP中循环语句的用法介绍
2012/01/30 PHP
php操作mysql数据库的基本类代码
2014/02/25 PHP
PHP-FPM和Nginx的通信机制详解
2019/02/01 PHP
PHP中的访问修饰符简单比较
2019/02/02 PHP
JavaScript中String和StringBuffer的速度之争
2010/04/01 Javascript
jQuery UI 应用不同Theme的办法
2010/09/12 Javascript
jQuery 快速结束当前正在执行的动画
2013/11/20 Javascript
Javascript中的异步编程规范Promises/A详细介绍
2014/06/06 Javascript
给before和after伪元素设置js效果的方法
2015/12/04 Javascript
Vuejs第九篇之组件作用域及props数据传递实例详解
2016/09/05 Javascript
原生JS实现日历组件的示例代码
2017/09/22 Javascript
HTML5+JS+JQuery+ECharts实现异步加载问题
2017/12/16 jQuery
LayUI表格批量删除方法
2018/08/15 Javascript
Vue+Element UI+vue-quill-editor富文本编辑器及插入图片自定义
2019/08/20 Javascript
js中比较两个对象是否相同的方法示例
2019/09/02 Javascript
vue 监听窗口变化对页面部分元素重新渲染操作
2020/07/28 Javascript
Vue 样式切换及三元判断样式关联操作
2020/08/09 Javascript
详解vue之自行实现派发与广播(dispatch与broadcast)
2021/01/19 Vue.js
Python脚本实现DNSPod DNS动态解析域名
2015/02/14 Python
Django实现后台上传并显示图片功能
2020/05/29 Python
css3 旋转按钮 使用CSS3创建一个旋转可变色按钮
2012/12/31 HTML / CSS
意大利自行车商店:Cingolani Bike Shop
2019/09/03 全球购物
SQL数据库笔试题
2016/03/08 面试题
幼师自我鉴定范文
2013/10/01 职场文书
软件工程师岗位职责
2013/11/16 职场文书
大四学生思想汇报
2014/01/13 职场文书
人力资源总监工作说明
2014/03/03 职场文书
2015年度房地产工作总结
2015/04/09 职场文书
故意杀人案辩护词
2015/05/21 职场文书
大国崛起日本观后感
2015/06/02 职场文书
乡镇司法所2015年度工作总结
2015/10/14 职场文书
反腐倡廉心得体会2016
2016/01/13 职场文书
送给客户微信问候语!
2019/07/04 职场文书
matlab xlabel位置的设置方式
2021/05/21 Python
Java 多线程并发FutureTask
2022/06/28 Java/Android