实现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使用socket远程连接错误处理方法
Apr 29 Python
python目录与文件名操作例子
Aug 28 Python
python实现感知器算法详解
Dec 19 Python
Python中常见的异常总结
Feb 20 Python
python实现五子棋人机对战游戏
Mar 25 Python
解决Python计算矩阵乘向量,矩阵乘实数的一些小错误
Aug 26 Python
PIL包中Image模块的convert()函数的具体使用
Feb 26 Python
pymysql 插入数据 转义处理方式
Mar 02 Python
python GUI库图形界面开发之PyQt5布局控件QHBoxLayout详细使用方法与实例
Mar 06 Python
python爬虫开发之Beautiful Soup模块从安装到详细使用方法与实例
Mar 09 Python
通过代码实例了解Python sys模块
Sep 14 Python
python实现文件分片上传的接口自动化
Nov 19 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
判“新”函数:得到今天与明天的秒数
2006/10/09 PHP
在PHP中实现Javascript的escape()函数代码
2010/08/08 PHP
php取整函数ceil,floo,round的用法及介绍
2013/08/31 PHP
dedecms函数分享之获取某一栏目所有子栏目
2014/05/19 PHP
PHP使用静态方法的几个注意事项
2014/09/16 PHP
Yii视图操作之自定义分页实现方法
2016/07/14 PHP
Smarty3配置及入门语法
2017/02/22 PHP
支持汉转拼和拼音分词的PHP中文工具类ChineseUtil
2018/02/23 PHP
在laravel中实现将查询的对象转换为多维数组的函数
2019/10/21 PHP
javascript Array.sort() 跨浏览器下需要考虑的问题
2009/12/07 Javascript
淘宝搜索框效果实现分析
2011/03/05 Javascript
jQuery Migrate 1.1.0 Released 注意事项
2014/06/14 Javascript
基于jQuery实现下拉框
2014/11/24 Javascript
js一维数组、多维数组和对象的混合使用方法
2016/04/03 Javascript
jQuery中hover方法搭配css的hover选择器,实现选中元素突出显示方法
2017/05/08 jQuery
JS使用for in有序获取对象数据
2020/05/19 Javascript
jQuery编写QQ简易聊天框
2020/08/27 jQuery
[01:43]3.19DOTA2发布会 三代刀塔人第三代
2014/03/25 DOTA
Python运算符重载用法实例分析
2015/06/01 Python
详解Python之数据序列化(json、pickle、shelve)
2017/03/30 Python
使用Python通过win32 COM打开Excel并添加Sheet的方法
2018/05/02 Python
HTML5声音录制/播放功能的实现代码
2018/05/03 HTML / CSS
国际领先的学术出版商:Springer
2017/01/11 全球购物
纽约著名的服装辅料来源:M&J Trimming
2017/07/26 全球购物
欧洲著名的二手奢侈品网站:Vestiaire Collective
2020/03/07 全球购物
2014乡镇领导班子四风对照检查材料思想汇报
2014/10/05 职场文书
个人工作总结范文2014
2014/11/07 职场文书
考试没考好检讨书(精选篇)
2014/11/16 职场文书
2016大学自主招生推荐信范文
2015/03/23 职场文书
2015年安全工作总结范文
2015/04/02 职场文书
想创业成功,需要掌握这些要点
2019/12/06 职场文书
Python内置数据结构列表与元组示例详解
2021/08/04 Python
基于Redis的List实现特价商品列表功能
2021/08/30 Redis
Pytorch中使用ImageFolder读取数据集时忽略特定文件
2022/03/23 Python
Win10 最新稳定版本 21H2开始推送
2022/04/19 数码科技
微信小程序 根据不同用户切换不同TabBar
2022/04/21 Javascript