Python实现的旋转数组功能算法示例


Posted in Python onFebruary 23, 2019

本文实例讲述了Python实现的旋转数组功能算法。分享给大家供大家参考,具体如下:

一、题目

给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。

例1:

输入: [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]

例2:

输入: [-1,-100,3,99] 和 k = 2
输出: [3,99,-1,-100]
解释:
向右旋转 1 步: [99,-1,-100,3]
向右旋转 2 步: [3,99,-1,-100]

说明:

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,击败了98%

附:本机测试示例代码:

# -*- coding:utf-8 -*-
nums= [1,2,3,4,5,6,7]
k =3
if nums:
  k = k % len(nums)
  nums[:]=nums[-k:]+nums[:-k]
print(nums)

运行结果:

[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,击败了16%

附:本机测试示例代码:

# -*- coding:utf-8 -*-
nums= [1,2,3,4,5,6,7]
k =3
if nums:
  k = k % len(nums)
  while k > 0:
    k -= 1
    nums.insert(0, nums[-1])
    nums.pop()
print(nums)

运行结果:

[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,击败了98%

附:本机测试示例代码:

# -*- coding:utf-8 -*-
nums= [1,2,3,4,5,6,7]
k =3
if nums:
  old_nums = nums[:]
  l = len(nums)
  for x in range(l):
    nums[(x+k) % l] = old_nums[x]
print(nums)

运行结果:

[5, 6, 7, 1, 2, 3, 4]

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python提示[Errno 32]Broken pipe导致线程crash错误解决方法
Nov 19 Python
Python接收Gmail新邮件并发送到gtalk的方法
Mar 10 Python
Python NumPy库安装使用笔记
May 18 Python
MySQL适配器PyMySQL详解
Sep 20 Python
python最长回文串算法
Jun 04 Python
python学生信息管理系统(初级版)
Oct 17 Python
Pytorch中accuracy和loss的计算知识点总结
Sep 10 Python
Python面向对象之多态原理与用法案例分析
Dec 30 Python
对tensorflow 中tile函数的使用详解
Feb 07 Python
SpringBoot实现登录注册常见问题解决方案
Mar 04 Python
如何将PySpark导入Python的放实现(2种)
Apr 26 Python
推荐技术人员一款Python开源库(造数据神器)
Jul 08 Python
Python实现求两个数组交集的方法示例
Feb 23 #Python
Python神奇的内置函数locals的实例讲解
Feb 22 #Python
Python玩转Excel的读写改实例
Feb 22 #Python
Python操作配置文件ini的三种方法讲解
Feb 22 #Python
Python使用pymongo库操作MongoDB数据库的方法实例
Feb 22 #Python
python调用虹软2.0第三版的具体使用
Feb 22 #Python
Python实现图片转字符画的代码实例
Feb 22 #Python
You might like
COM in PHP (winows only)
2006/10/09 PHP
PHP新手上路(十三)
2006/10/09 PHP
在PHP中使用redis
2013/11/04 PHP
Javascript-Mozilla和IE中的一个函数直接量的问题分析
2007/08/12 Javascript
该如何加载google-analytics(或其他第三方)的JS
2010/05/13 Javascript
读JavaScript DOM编程艺术笔记
2011/11/15 Javascript
JS实现侧悬浮浮动实例代码
2013/11/29 Javascript
封装了jQuery的Ajax请求全局配置
2015/02/05 Javascript
JS实现控制表格行文本对齐的方法
2015/03/30 Javascript
js获取时间精确到秒(年月日)
2016/03/16 Javascript
jQuery实现的选择商品飞入文本框动画效果完整实例
2016/08/10 Javascript
浅谈pc端rem字体设置的问题
2017/08/03 Javascript
axios的拦截请求与响应方法
2018/08/11 Javascript
axios对请求各种异常情况处理的封装方法
2018/09/25 Javascript
对angular4子路由&辅助路由详解
2018/10/09 Javascript
Vue实现导航栏点击当前标签变色功能
2020/08/19 Javascript
Vue数据双向绑定原理实例解析
2020/05/15 Javascript
js简单粗暴的发布订阅示例代码
2021/01/23 Javascript
[02:53]DOTA2英雄昆卡基础教程
2013/11/25 DOTA
删除python pandas.DataFrame 的多重index实例
2018/06/08 Python
python多进程控制学习小结
2018/10/31 Python
OpenCV+Python--RGB转HSI的实现
2019/11/27 Python
IE滤镜与CSS3效果(详细整理分享)
2013/01/25 HTML / CSS
H&M美国官网:欧洲最大的服饰零售商
2016/09/07 全球购物
英国拳击装备购物网站:RDX Sports
2018/01/23 全球购物
海滩咖啡馆:Beach Cafe
2018/02/02 全球购物
莫斯科制造商的廉价皮大衣:Fursk
2020/06/09 全球购物
在对linux系统分区进行格式化时需要对磁盘簇(或i节点密度)的大小进行选择,请说明选择的原则
2012/11/24 面试题
一名毕业生的自我鉴定
2013/12/04 职场文书
大学生旅游业创业计划书
2014/01/29 职场文书
铲车司机岗位职责
2014/03/15 职场文书
2015年国庆晚会主持词
2015/07/01 职场文书
婚礼伴郎致辞
2015/07/28 职场文书
团队合作精神学习心得体会
2016/01/19 职场文书
幼儿园2016年感恩节活动总结
2016/04/01 职场文书
用Python提取PDF表格的方法
2021/04/11 Python