从零开始刷Leetcode——数组(31.33)
文章目录
- 31. 下一个排列
- 33. 搜索旋转排序数组
31. 下一个排列
实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。
如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。
必须原地修改,只允许使用额外常数空间。
例:123变成132;115变成151
1.排序+遍历
class Solution:def nextPermutation(self, nums: List[int]) -> None:"""Do not return anything, modify nums in-place instead."""n = len(nums)flag = 0for i in range(len(nums)-1, 0, -1):if nums[i] > nums[i-1]:flag = 1nums[i:] = sorted(nums[i:])for j in range(i, len(nums)):if nums[j]> nums[i-1]:nums[i-1], nums[j] = nums[j], nums[i-1]breakbreakif flag == 0:nums.sort()
这道题逻辑是从后遍历,遇到前一个数比后一个数小的时候说明是非递减数组。这时只需要修改前一个数之后的数组即可,修改的方法是将该数之后的数字递增排序,将该数与排序之后第一个比该数大的数交换即可。40ms,13.7MB
33. 搜索旋转排序数组
假设按照升序排序的数组在预先未知的某个点上进行了旋转。
( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。
搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。
你可以假设数组中不存在重复的元素。
你的算法时间复杂度必须是 O(log n) 级别。
1.二分查找
class Solution:def search(self, nums: List[int], target: int) -> int:low = 0high = len(nums)-1if not nums: return -1while low < high-1:mid = (low+high)//2# 左边无旋转if nums[low] < nums[mid]:if target <= nums[mid] and target >= nums[low]:high = midelse:low = mid# 右边无旋转else:if target <= nums[high] and target >= nums[mid]:low = midelse:high = midif nums[low] == target: return lowif nums[high] == target: return highreturn -1
因为要求O(log n),所以只能用二分查找,虽然数组经过旋转,但分割后前后两个数组必有一个是递增的,只需比较目标数与这个递增数组的首尾值就可以进行后续运算了。40ms,13.9MB
从零开始刷Leetcode——数组(31.33)相关推荐
- 从零开始刷Leetcode——数组(1.26)
文章目录 1.两数之和 26.删除排序数组中的重复项 马上要去读研了,作为一个转码的ee学生,刷题还是很必要的.从零开始,希望能坚持下去!打算按照类别和难度慢慢刷,一天两三道题左右,争取明年夏季找实习 ...
- 从零开始刷Leetcode——数组(11.15.16.18)
文章目录 11. 盛最多水的容器 15. 三数之和 16. 最接近的三数之和 18. 四数之和 前800题easy难度想做的已经做完了,之后是medium难度 11. 盛最多水的容器 给你 n 个非负 ...
- 从零开始刷Leetcode——数组(122.167.169)
文章目录 122.买卖股票的最佳时机 II 167.两数之和II 169.多数元素 122.买卖股票的最佳时机 II 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计 ...
- 从零开始刷Leetcode——数组(118.119.121)
文章目录 119.杨辉三角2 118.杨辉三角 121.买卖股票的最佳时机 119.杨辉三角2 给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行. 在杨辉三角中,每个数是它左上方和右 ...
- 从零开始刷Leetcode——数组(941.977)
文章目录 941. 有效的山脉数组 977. 有序数组的平方 三级目录 941. 有效的山脉数组 给定一个整数数组 A,如果它是有效的山脉数组就返回 true,否则返回 false. 让我们回顾一下, ...
- 从零开始刷Leetcode——数组(896.905.914.922)
文章目录 896. 单调数列 905. 按奇偶排序数组 914. 卡牌分组 922. 按奇偶排序数组 II 896. 单调数列 如果数组是单调递增或单调递减的,那么它是单调的. 如果对于所有 i &l ...
- 从零开始刷Leetcode——数组(830.849.888)
文章目录 830. 较大分组的位置 849. 到最近的人的最大距离 888. 公平的糖果交换 830. 较大分组的位置 在一个由小写字母构成的字符串 S 中,包含由一些连续的相同字符所构成的分组. 例 ...
- 从零开始刷Leetcode——数组(746.747)
文章目录 747. 至少是其他数字两倍的最大数 746. 使用最小花费爬楼梯 747. 至少是其他数字两倍的最大数 在一个给定的数组nums中,总是存在一个最大元素 . 查找数组中的最大元素是否至少是 ...
- 从零开始刷Leetcode——数组(697.717.724)
文章目录 697. 数组的度 717. 1比特与2比特字符 724. 寻找数组的中心索引 697. 数组的度 给定一个非空且只包含非负数的整数数组 nums, 数组的度的定义是指数组里任一元素出现频数 ...
最新文章
- PHP简单封装MysqlHelper类
- vs2017c语言图像界面库,C語言中在VS2017中構建圖形界面基礎知識點
- 苹果将推出新款iPhone 7/8?为应对德国禁售令!
- [Web Chart系列之一(续)]Web端图形绘制SVG,VML, HTML5 Canvas 简单实例
- 跟开涛老师学shiro -- 身份验证
- spring的注入和直接new一个对象有什么不同?
- odbc配置mysql SSL报错_odbc数据库的安装
- java计算机毕业设计四六级在线考试系统源码+系统+数据库+lw文档+mybatis+运行部署
- rop检查_【国际高影响力文章红毯秀7月】白内障扩瞳安全性、ROP筛查新标准、45mmHg眼内灌注压...
- 文本相似度计算(中英文)详解实战
- RFSoC应用笔记 - RF数据转换器 -09- RFSoC关键配置之RF-DAC内部解析(三)
- Appops权限管理
- 导师和学生之间应该多说实话
- Notepad++常用插件下载地址
- 全国/全世界城市Json数据大全
- k3s证书过期的处理 以及 修改k3s证书有效期为10年(或自定义时间)
- 在ue4的CBL中查询(函数、变量)的几点提示
- 从 Discord 看未来社交的「超级群」模式
- 微信浏览器 MP4播放失败,安卓下微信浏览器不能播放MP4问题的解决,gzip捣的鬼
- 今日干货|给视频添加字幕的软件有哪些?
热门文章
- zabbix安装与配置
- JavaScript高级程序设计笔记 事件冒泡和事件捕获
- 数据库写入性能测试小工具
- 一个二维码不同手机扫描下载时跳转问题
- OpenCV-通道合并cv::merge
- linux 函数自动补全,Shell脚本中实现自动补全功能
- java sublist_java中的subList
- bootstrap-table 列属性_Bootstrap Table 列参数columns使用总结
- cdr自动排版插件_CDR ymxkDoc插件 支持X72020到以后版本
- Python零基础入门(二)——Python中常见的数据结构[学习笔记]