39. 恢复旋转排序数组
39. 恢复旋转排序数组
给定一个旋转排序数组,在原地恢复其排序。
样例
[4, 5, 1, 2, 3] -> [1, 2, 3, 4, 5]
挑战
使用O(1)的额外空间和O(n)时间复杂度
说明
什么是旋转数组?
比如,原始数组为[1,2,3,4], 则其旋转数组可以是[1,2,3,4], [2,3,4,1], [3,4,1,2], [4,1,2,3]
方法1:
三步翻转法:
"""
三步反转法找到两个rotated的数组的间隔点,条件:nums[i] > nums[i+1]反转[0,i+1]的数组
反转[i+1,size]的数组
反转[0,size]的数组数组就变成的有序的数组
"""
class Solution:"""@param nums: An integer array@return: nothing"""def recoverRotatedSortedArray(self, nums):# write your code herel = len(nums)if l == 0:return -1for i in range(l - 1):if nums[i] > nums[i + 1]:self.reverse(nums, 0, i)self.reverse(nums, i + 1, l - 1)self.reverse(nums, 0, l - 1)return nums#反转任何数组,无论大小等顺序关系,反转区间是start -- enddef reverse(self, nums, start, end):while start < end:nums[start], nums[end] = nums[end], nums[start]start += 1end -= 1my_solution = Solution()
#nums = [5, 6, 1, 2, 3,4]
nums = [3,4,1,2]
reversed_nums = my_solution.recoverRotatedSortedArray(nums)
print(reversed_nums)
方法2:
霸气Python,让你服
sort是直接在原数组上排序,sorted是返回排序后的结果
对于一个无序的列表a,调用a.sort(),对a进行排序后返回a,sort()函数修改待排序的列表内容。
而对于同样一个无序的列表a,调用sorted(a),对a进行排序后返回一个新的列表,而对a不产生影响。
class Solution:"""@param nums: An integer array@return: nothing"""def recoverRotatedSortedArray(self, nums):# write your code herereturn nums.sort()
sort函数和sorted()函数区别
'''
sort()是一个函数,这个函数没有返回值,所以调用这个函数后打印是none,而a这个数组还在,是被拍好序的sort()没有返回值,是直接在原数组上操作,也就是说,原数组(nums, nums_2)被排序了
题目中的要求是,要直接在原数组中排序,而不是返回排序后的结果sort是直接在原数组上排序,sorted是返回排序后的结果对于一个无序的列表a,调用a.sort(),对a进行排序后返回a,sort()函数修改待排序的列表内容。而对于同样一个无序的列表a,调用sorted(a),对a进行排序后返回一个新的列表,而对a不产生影响。
'''nums = [5, 6, 1, 2, 3,4]
original_nums = nums.sort()
print(original_nums)
print(nums) #sort()是一个函数,这个函数没有返回值,所以调用这个函数后打印是none,而a这个数组还在,是被拍好序的nums_2 = [4,5,1,2,3]
print(nums_2.sort())b = sorted(nums)print(b)输出
None
[1, 2, 3, 4, 5, 6]
None
[1, 2, 3, 4, 5, 6]
[Finished in 0.0s]
1
微信扫一扫
关注该公众号
39. 恢复旋转排序数组相关推荐
- 《LeetCode力扣练习》第33题 搜索旋转排序数组 Java
<LeetCode力扣练习>第33题 搜索旋转排序数组 Java 一.资源 题目: 整数数组 nums 按升序排列,数组中的值 互不相同 . 在传递给函数之前,nums 在预先未知的某个下 ...
- 算法-------寻找旋转排序数组中的最小值
题目 寻找旋转排序数组中的最小值假设按照升序排序的数组在预先未知的某个点上进行了旋转.( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] ).请找出其中最小的元素 ...
- python 寻找旋转排序数组中的最小值
| 寻找旋转排序数组中的最小值 已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组.例如,原数组 nums = [0,1,2,4,5,6,7] 在变化后可能得到 ...
- python 搜索旋转排序数组
| 搜索旋转排序数组 整数数组 nums 按升序排列,数组中的值 互不相同 .在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转 ...
- LeetCode (二分小专题)33搜索旋转排序数组34在排序数组中查找元素的第一个和最后一个位置35搜索插入位置
前言 国庆前最后一次打卡,国庆后继续开启,公众号bigsai回复进群欢迎加入打卡,如有帮助记得点赞收藏. 近期打卡记录: LeetCode 32最长有效括号(困难) (本周) LeetCode 30串 ...
- 81. 搜索旋转排序数组 II
81. 搜索旋转排序数组 II Ideas 这题,,,,对Python来说一点技术含量没有. 哈哈哈哈,开个玩笑,完美的避开了考点. Code Python class Solution:def se ...
- 旋转排序数组系列题详解
旋转排序数组系列题详解 文章目录 旋转排序数组系列题详解 一.问题描述:旋转数组的最小数字 二.分析:二分查找 三.代码 四.问题描述:寻找旋转排序数组中的最小值 五.分析:二分搜索 六.代码 七.问 ...
- LeetCode—33. 搜索旋转排序数组
33. 搜索旋转排序数组 题目描述:整数数组 nums 按升序排列,数组中的值 互不相同 . 在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length ...
- LeetCode 33. 搜索旋转排序数组 golang
33. 搜索旋转排序数组 三个测试用例, 这个题的难度是二分法的左侧条件很难写出来. 4 5 6 0 1 2 3 1 2 3 4 5 6 0 5 1 2 3 4 ( 例如,数组 [0,1,2,4,5, ...
最新文章
- 8个让人相见恨晚的软件,每一款都十分良心
- 硬盘突然提示没有初始化_分享一下固态硬盘不认盘的修复方法
- 合并两个已经排好序的不等长的数组
- mgr未同步 mysql_mysql8.0 搭建mgr踩坑记录
- 虚拟专题:知识图谱 | 频谱知识图谱:面向未来频谱管理的智能引擎
- @controlleradvice注解作用_springboot的常用注解分析
- sql server表分区_SQL Server中的FORCESCAN和分区表
- 在Content provider实现中使用SQLiteOpenHelper
- QBlog V2.5 源码开放下载(ASP.NET 番外系列之开端)
- Filter In Baan!
- Struts2之异常处理
- 俄罗斯方块C4droid
- arping命令 《openstack 网络》
- 百度网盘内容提取网站
- 传智播客JavaWeb听课总结
- 判断是否为非负数、小数点后两位
- 前端开发工程师原生html进阶指南
- Python 免费教程视频-微软教学
- Python+OpenCV对证件照换底
- arduino leonardo 入门