python旋转数组_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]
python旋转数组_Python3实现旋转数组的3种算法相关推荐
- python 矩阵类型转换_Python3 列表,数组,矩阵的相互转换的方法示例
在使用列表.数组和矩阵的过程中,经常需要相互转换.特此总结相互间转换的过程及结果,供大家参考. 第三方包:numpy import numpy as np mylist = [[1, 2, 3], [ ...
- Algorithm:C++/python语言实现之求旋转数组最小值、求零子数组、求最长公共子序列和最长公共子串、求LCS与字符串编辑距离
Algorithm:C++/python语言实现之求旋转数组最小值.求零子数组.求最长公共子序列和最长公共子串.求LCS与字符串编辑距离 目录 一.求旋转数组最小值 1.分析问题 2.解决思路 二.求 ...
- python将矩阵顺时针旋转90度_python 二维数组90度旋转的方法
如下所示: #!/usr/bin/env python #-*- coding: utf-8 -*- """ [0, 1, 2, 3] [0, 1, 2, 3] [0, ...
- 1.8 编程基础之多维数组 11 图像旋转 4分 python
http://noi.openjudge.cn/ch0108/11/ """ 1.8 编程基础之多维数组 11 图像旋转 4分 http://noi.openjudge. ...
- 给定一个排序后的数组,包含n个整数,但这个数组已被旋转过多次,找出数组中的某个元素...
2019独角兽企业重金招聘Python工程师标准>>> /** * 功能:给定一个排序后的数组,包含n个整数,但这个数组已被旋转过多次,次数不详.找出数组中的某个元素. * 可以假定 ...
- 9.11排序与查找(三)——给定一个排序后的数组,包括n个整数,但这个数组已被旋转过多次,找出数组中的某个元素...
/** * 功能:给定一个排序后的数组.包括n个整数.但这个数组已被旋转过多次,次数不详.找出数组中的某个元素. * 能够假定数组元素原先是按从小到大的顺序排列的. */ /*** 思路:数组被 ...
- C++数组的左右旋转的实现算法(附完整源码)
C++数组的左右旋转的实现算法 C++数组的左右旋转的实现算法完整源码(定义,实现,main函数测试) C++数组的左右旋转的实现算法完整源码(定义,实现,main函数测试) #include < ...
- 【数据结构与算法】之深入解析“寻找旋转排序数组中的最小值”的求解思路与算法示例
一.题目要求 已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次旋转后,得到输入数组.例如,原数组 nums = [0, 1, 2, 4, 5, 6, 7] 在变化后可能得到: 若旋转 ...
- Python3实现旋转数组的3种算法
下面是Python3实现的旋转数组的3种算法. 一.题目 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数. 例如: 输入: [1,2,3,4,5,6,7] 和 k = 3 输出: ...
最新文章
- WatchClear 方法 html5,clearWatch()
- 经典的JavaScript入门书
- Python实现信息自动配对爬虫排版程序(附下载)
- 01_字符串处理------01_切分
- 第一册:lesson seventeen。
- 20169210《Linux内核原理与分析》第十一周作业
- 脸红是因为缺乏乙醛分解酶导致的酒精中毒
- 写一个饿汉单例模式的例子_你写的单例模式,能防止反序列化和反射吗?
- 物联网技术渐趋成熟 车联网应用或成市场主驱力
- App移动端性能工具调研
- P2564 [SCOI2009]生日礼物
- 领域应用 | 完备的娱乐行业知识图谱库如何建成?爱奇艺知识图谱落地实践
- jsp___jstl标签
- js中WINDOW对象中的navigator成员对象
- 如何选择适合自己的 Linux 发行版
- mapxtreme 常用实例
- 在.cpp文件中调用.c文件中的函数
- 崂山道士、Harry Potter和人脸识别
- 美年旅游_套餐管理_分页PageHelper
- sql数据库 ‘xxxxxx‘ 已存在,请选择其他数据库名称
热门文章
- VMware创建Linux及局域网内独立访问IP和访问外网IP的配置
- spring boot Exception in Thread “main” java.lang.classNoFoundException
- 3.Android的新虚拟ART与原虚拟机DVM的区别
- 微信小程序 等待几秒、_微信小程序—setTimeout定时器的坑
- java元数据是什么_用存储过程和 JAVA 写报表数据源有什么弊端?
- android获取短信息,从其ID Android获取短信详细信息
- python你是否也走进了这个误区了_Python是不是被严重高估了?
- 重庆高考计算机分数线,重庆高考历年分数线
- laravel 项目迁移_在Laravel迁移
- 如何使用Tornado实现WebSocket服务器?