python 旋转数组 多种解题思路
leetcode 题目描述:给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。
- 尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。
- 要求使用空间复杂度为 O(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]
先说说笔者拿到题目的思路 刚开始的时候没有看到有空间复制度为1的要求 觉得 这不是很简单吗 新建一个新数组依次向后移动即可
不知道大家看得懂吗 就向后移几个位置然后取lens个值
上代码
class Solution(object):
def rotate(self, nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: void Do not return anything, modify nums in-place instead.
"""
lens = len(nums)
temp=nums+nums for i in range(lens): nums.insert(i,temp[((lens-k+i))]) #插入第i个位置
nums.pop(i+1) #将原来第i个位置的值删除
当然了 这种方法虽然可以通过leetcode测试 但是并不满足空间O(1)的要求
看了别人的代码 列举两个比较好的方法
第一个
def rotate3(self, nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: void Do not return anything, modify nums in-place instead.
"""
for i in range(k): #进行k次操作
last = nums.pop() #删除最后一个值
nums.insert(0, last) #将最后一个值 放入第一个位置
print(nums)
可以看到 这种方法 每次将最后一个值删除 再存入第一个位置 很巧妙利用了pop()方法
第二个
def rotate4(self, nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: void Do not return anything, modify nums in-place instead.
"""
nums[:] = nums[-(k % len(nums)):] + nums[:-(k % len(nums))]
print(nums)
第二个 简直无敌 python的简略 无人能敌 一行搞定
解释一下代码 如图应该很好的解释了 本质是根据k取2个区域 然后交换2个区域的顺序
python 旋转数组 多种解题思路的更多相关文章
- leetCode 88.Merge Sorted Array (合并排序数组) 解题思路和方法
Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note: Y ...
- python 旋转数组
#!/usr/bin/env python3 #-*-encoding:utf-8-*- l = [] u = [] q = 5 xx=[[col for col in range(q)] for r ...
- 【剑指Offer】旋转数组中的最小数字 解题报告(Python)
[剑指Offer]旋转数组中的最小数字 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://www.nowcoder.com/ta/coding-intervie ...
- 旋转数组的最小数字(C++ 和 Python 实现)
(说明:本博客中的题目.题目详细说明及参考代码均摘自 “何海涛<剑指Offer:名企面试官精讲典型编程题>2012年”) 题目 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的 ...
- 旋转数组的最小数字(python)
题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋 ...
- 剑指Offer面试题:7.旋转数组的最小数字
一.题目:旋转数组的最小数字 题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如数组{3,4,5,1,2}为{1,2 ...
- 剑指OFFER之旋转数组的最小数字(九度OJ1386)
题目描述: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转 ...
- [LeetCode] 45. Jump Game II 解题思路
Given an array of non-negative integers, you are initially positioned at the first index of the arra ...
- 《剑指offer》旋转数组中的最小数字
本题来自<剑指offer> 旋转数组中的最小数字 题目: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素. 例 ...
随机推荐
- Lua中面向对象
一.Lua中类的简单实现: (1)版本——摘自 Cocos2.0中的: --Create an class. function class(classname, super) local superT ...
- 利用CCS3渐变实现条纹背景
本文摘自<CSS揭秘>中国工信出版集团 难题: 不论是在网页设计中,还是在其他传统媒介中(比如杂志和墙纸等),各种尺寸.颜色.角度的条纹图案在视觉设计中无处不在.要想在网页中实现条纹图案, ...
- c++ 面试题(算法类)
1,从无序的数据流中找到其中位数:(用大根堆和小根堆来实现) float getMidimum(vector<int>& nums) { priority_queue<int ...
- matplotlib坐标轴的一些操作
- nignx知识点总结
https://segmentfault.com/a/1190000013781162
- 飞鱼星、H3C企业路由器配置
飞鱼星企业路由器配置外网访问IIS 只配置端口映射就行,配置好了,如果不立即重启,需要等几分钟才能生效 H3C路由器配置虚拟服务器即可
- [leetcode]297. Serialize and Deserialize Binary Tree 序列化与反序列化二叉树
Serialization is the process of converting a data structure or object into a sequence of bits so tha ...
- day 32 JavaScript
1.1. JavaScript介绍 HTML:定义网页的结构 CSS:美化网页 JavaScript:实现用户交互: 1.1.2 JavaScript特点 n 安全性较高 n 跨平台,兼容性好 1 ...
- python基础之Day13
一.有参装饰器 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 ...
- 使用RabbitMq
1.配置环境 http://www.cnblogs.com/longlongogo/p/6479424.html 2.安装RabbitMQ https://www.cnblogs.com/longlo ...