一、试题

给出一个数组,将数组中的元素往右边移动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]

python旋转数组_Python3实现旋转数组的3种算法相关推荐

  1. python 矩阵类型转换_Python3 列表,数组,矩阵的相互转换的方法示例

    在使用列表.数组和矩阵的过程中,经常需要相互转换.特此总结相互间转换的过程及结果,供大家参考. 第三方包:numpy import numpy as np mylist = [[1, 2, 3], [ ...

  2. Algorithm:C++/python语言实现之求旋转数组最小值、求零子数组、求最长公共子序列和最长公共子串、求LCS与字符串编辑距离

    Algorithm:C++/python语言实现之求旋转数组最小值.求零子数组.求最长公共子序列和最长公共子串.求LCS与字符串编辑距离 目录 一.求旋转数组最小值 1.分析问题 2.解决思路 二.求 ...

  3. python将矩阵顺时针旋转90度_python 二维数组90度旋转的方法

    如下所示: #!/usr/bin/env python #-*- coding: utf-8 -*- """ [0, 1, 2, 3] [0, 1, 2, 3] [0, ...

  4. 1.8 编程基础之多维数组 11 图像旋转 4分 python

    http://noi.openjudge.cn/ch0108/11/ """ 1.8 编程基础之多维数组 11 图像旋转 4分 http://noi.openjudge. ...

  5. 给定一个排序后的数组,包含n个整数,但这个数组已被旋转过多次,找出数组中的某个元素...

    2019独角兽企业重金招聘Python工程师标准>>> /** * 功能:给定一个排序后的数组,包含n个整数,但这个数组已被旋转过多次,次数不详.找出数组中的某个元素. * 可以假定 ...

  6. 9.11排序与查找(三)——给定一个排序后的数组,包括n个整数,但这个数组已被旋转过多次,找出数组中的某个元素...

    /**  * 功能:给定一个排序后的数组.包括n个整数.但这个数组已被旋转过多次,次数不详.找出数组中的某个元素.  * 能够假定数组元素原先是按从小到大的顺序排列的.  */ /*** 思路:数组被 ...

  7. C++数组的左右旋转的实现算法(附完整源码)

    C++数组的左右旋转的实现算法 C++数组的左右旋转的实现算法完整源码(定义,实现,main函数测试) C++数组的左右旋转的实现算法完整源码(定义,实现,main函数测试) #include < ...

  8. 【数据结构与算法】之深入解析“寻找旋转排序数组中的最小值”的求解思路与算法示例

    一.题目要求 已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次旋转后,得到输入数组.例如,原数组 nums = [0, 1, 2, 4, 5, 6, 7] 在变化后可能得到: 若旋转 ...

  9. Python3实现旋转数组的3种算法

    下面是Python3实现的旋转数组的3种算法. 一.题目 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数. 例如: 输入: [1,2,3,4,5,6,7] 和 k = 3 输出: ...

最新文章

  1. WatchClear 方法 html5,clearWatch()
  2. 经典的JavaScript入门书
  3. Python实现信息自动配对爬虫排版程序(附下载)
  4. 01_字符串处理------01_切分
  5. 第一册:lesson seventeen。
  6. 20169210《Linux内核原理与分析》第十一周作业
  7. 脸红是因为缺乏乙醛分解酶导致的酒精中毒
  8. 写一个饿汉单例模式的例子_你写的单例模式,能防止反序列化和反射吗?
  9. 物联网技术渐趋成熟 车联网应用或成市场主驱力
  10. App移动端性能工具调研
  11. P2564 [SCOI2009]生日礼物
  12. 领域应用 | 完备的娱乐行业知识图谱库如何建成?爱奇艺知识图谱落地实践
  13. jsp___jstl标签
  14. js中WINDOW对象中的navigator成员对象
  15. 如何选择适合自己的 Linux 发行版
  16. mapxtreme 常用实例
  17. 在.cpp文件中调用.c文件中的函数
  18. 崂山道士、Harry Potter和人脸识别
  19. 美年旅游_套餐管理_分页PageHelper
  20. sql数据库 ‘xxxxxx‘ 已存在,请选择其他数据库名称

热门文章

  1. VMware创建Linux及局域网内独立访问IP和访问外网IP的配置
  2. spring boot Exception in Thread “main” java.lang.classNoFoundException
  3. 3.Android的新虚拟ART与原虚拟机DVM的区别
  4. 微信小程序 等待几秒、_微信小程序—setTimeout定时器的坑
  5. java元数据是什么_用存储过程和 JAVA 写报表数据源有什么弊端?
  6. android获取短信息,从其ID Android获取短信详细信息
  7. python你是否也走进了这个误区了_Python是不是被严重高估了?
  8. 重庆高考计算机分数线,重庆高考历年分数线
  9. laravel 项目迁移_在Laravel迁移
  10. 如何使用Tornado实现WebSocket服务器?