实现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中函数的参数
Apr 27 Python
Python下rrdtool模块的基本使用方法
Nov 13 Python
Python黑帽编程 3.4 跨越VLAN详解
Sep 28 Python
浅谈python和C语言混编的几种方式(推荐)
Sep 27 Python
每天迁移MySQL历史数据到历史库Python脚本
Apr 13 Python
python dataframe 输出结果整行显示的方法
Jun 14 Python
numpy.std() 计算矩阵标准差的方法
Jul 11 Python
Python二进制文件读取并转换为浮点数详解
Jun 25 Python
python分数表示方式和写法
Jun 26 Python
python实现可变变量名方法详解
Jul 01 Python
python 实现分组求和与分组累加求和代码
May 18 Python
基于python实现百度语音识别和图灵对话
Nov 02 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学习之运算符相关概念
2011/06/09 PHP
php daddslashes()和 saddslashes()有哪些区别分析
2012/10/26 PHP
PHP之autoload运行机制实例分析
2014/08/28 PHP
php生成gif动画的方法
2015/11/05 PHP
对于Laravel 5.5核心架构的深入理解
2018/02/22 PHP
iphone safari不支持position fixed的解决方法
2012/05/04 Javascript
Javascript 异步加载详解(浏览器在javascript的加载方式)
2012/05/20 Javascript
javascript特殊用法示例介绍
2013/11/29 Javascript
使用jQuery设置disabled属性与移除disabled属性
2014/08/21 Javascript
页面加载完后自动执行一个方法的js代码
2014/09/06 Javascript
SyntaxHighlighter 3.0.83使用笔记
2015/01/26 Javascript
JS选项卡动态替换banner图片路径的方法
2015/05/11 Javascript
仅一个form表单 js实现注册信息依次填写提交功能
2016/06/12 Javascript
jQuery插件jquery.kxbdmarquee.js实现无缝滚动效果
2017/02/15 Javascript
微信小程序 滚动到某个位置添加class效果实现代码
2017/04/19 Javascript
微信小程序 获取session_key和openid的实例
2017/08/17 Javascript
JavaScript实现精美个性导航栏筋斗云效果
2017/10/29 Javascript
vue3.0 自适应不同分辨率电脑的操作
2021/02/06 Vue.js
[54:54]Newbee vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
详细讲解用Python发送SMTP邮件的教程
2015/04/29 Python
Python扫描IP段查看指定端口是否开放的方法
2015/06/09 Python
Python实现Logger打印功能的方法详解
2017/09/01 Python
django.db.utils.ProgrammingError: (1146, u“Table‘’ doesn’t exist”)问题的解决
2018/07/13 Python
python 图像平移和旋转的实例
2019/01/10 Python
Python3.5基础之NumPy模块的使用图文与实例详解
2019/04/24 Python
python3安装crypto出错及解决方法
2019/07/30 Python
简单了解python装饰器原理及使用方法
2019/12/18 Python
Python实现UDP程序通信过程图解
2020/05/15 Python
opencv之颜色过滤只留下图片中的红色区域操作
2020/06/05 Python
Pycharm2020.1安装无法启动问题即设置中文插件的方法
2020/08/07 Python
高二物理教学反思
2014/02/08 职场文书
大学生素质拓展活动方案
2014/02/11 职场文书
党员干部形式主义个人整改措施
2014/09/17 职场文书
群众路线剖析材料怎么写
2014/10/09 职场文书
夫妻房产协议书的格式
2014/10/11 职场文书
事业单位岗位说明书
2015/10/08 职场文书