文章目录

  • 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)相关推荐

  1. 从零开始刷Leetcode——数组(1.26)

    文章目录 1.两数之和 26.删除排序数组中的重复项 马上要去读研了,作为一个转码的ee学生,刷题还是很必要的.从零开始,希望能坚持下去!打算按照类别和难度慢慢刷,一天两三道题左右,争取明年夏季找实习 ...

  2. 从零开始刷Leetcode——数组(11.15.16.18)

    文章目录 11. 盛最多水的容器 15. 三数之和 16. 最接近的三数之和 18. 四数之和 前800题easy难度想做的已经做完了,之后是medium难度 11. 盛最多水的容器 给你 n 个非负 ...

  3. 从零开始刷Leetcode——数组(122.167.169)

    文章目录 122.买卖股票的最佳时机 II 167.两数之和II 169.多数元素 122.买卖股票的最佳时机 II 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计 ...

  4. 从零开始刷Leetcode——数组(118.119.121)

    文章目录 119.杨辉三角2 118.杨辉三角 121.买卖股票的最佳时机 119.杨辉三角2 给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行. 在杨辉三角中,每个数是它左上方和右 ...

  5. 从零开始刷Leetcode——数组(941.977)

    文章目录 941. 有效的山脉数组 977. 有序数组的平方 三级目录 941. 有效的山脉数组 给定一个整数数组 A,如果它是有效的山脉数组就返回 true,否则返回 false. 让我们回顾一下, ...

  6. 从零开始刷Leetcode——数组(896.905.914.922)

    文章目录 896. 单调数列 905. 按奇偶排序数组 914. 卡牌分组 922. 按奇偶排序数组 II 896. 单调数列 如果数组是单调递增或单调递减的,那么它是单调的. 如果对于所有 i &l ...

  7. 从零开始刷Leetcode——数组(830.849.888)

    文章目录 830. 较大分组的位置 849. 到最近的人的最大距离 888. 公平的糖果交换 830. 较大分组的位置 在一个由小写字母构成的字符串 S 中,包含由一些连续的相同字符所构成的分组. 例 ...

  8. 从零开始刷Leetcode——数组(746.747)

    文章目录 747. 至少是其他数字两倍的最大数 746. 使用最小花费爬楼梯 747. 至少是其他数字两倍的最大数 在一个给定的数组nums中,总是存在一个最大元素 . 查找数组中的最大元素是否至少是 ...

  9. 从零开始刷Leetcode——数组(697.717.724)

    文章目录 697. 数组的度 717. 1比特与2比特字符 724. 寻找数组的中心索引 697. 数组的度 给定一个非空且只包含非负数的整数数组 nums, 数组的度的定义是指数组里任一元素出现频数 ...

最新文章

  1. PHP简单封装MysqlHelper类
  2. vs2017c语言图像界面库,C語言中在VS2017中構建圖形界面基礎知識點
  3. 苹果将推出新款iPhone 7/8?为应对德国禁售令!
  4. [Web Chart系列之一(续)]Web端图形绘制SVG,VML, HTML5 Canvas 简单实例
  5. 跟开涛老师学shiro -- 身份验证
  6. spring的注入和直接new一个对象有什么不同?
  7. odbc配置mysql SSL报错_odbc数据库的安装
  8. java计算机毕业设计四六级在线考试系统源码+系统+数据库+lw文档+mybatis+运行部署
  9. rop检查_【国际高影响力文章红毯秀7月】白内障扩瞳安全性、ROP筛查新标准、45mmHg眼内灌注压...
  10. 文本相似度计算(中英文)详解实战
  11. RFSoC应用笔记 - RF数据转换器 -09- RFSoC关键配置之RF-DAC内部解析(三)
  12. Appops权限管理
  13. 导师和学生之间应该多说实话
  14. Notepad++常用插件下载地址
  15. 全国/全世界城市Json数据大全
  16. k3s证书过期的处理 以及 修改k3s证书有效期为10年(或自定义时间)
  17. 在ue4的CBL中查询(函数、变量)的几点提示
  18. 从 Discord 看未来社交的「超级群」模式
  19. 微信浏览器 MP4播放失败,安卓下微信浏览器不能播放MP4问题的解决,gzip捣的鬼
  20. 今日干货|给视频添加字幕的软件有哪些?

热门文章

  1. zabbix安装与配置
  2. JavaScript高级程序设计笔记 事件冒泡和事件捕获
  3. 数据库写入性能测试小工具
  4. 一个二维码不同手机扫描下载时跳转问题
  5. OpenCV-通道合并cv::merge
  6. linux 函数自动补全,Shell脚本中实现自动补全功能
  7. java sublist_java中的subList
  8. bootstrap-table 列属性_Bootstrap Table 列参数columns使用总结
  9. cdr自动排版插件_CDR ymxkDoc插件 支持X72020到以后版本
  10. Python零基础入门(二)——Python中常见的数据结构[学习笔记]