0153. 寻找旋转排序数组中的最小值
题目地址(153. 寻找旋转排序数组中的最小值)
https://leetcode-cn.com/problems/find-minimum-in-rotated-sorted-array/
题目描述
前置知识
公司
暂无
思路
这道题和普通的旋转数组找指定值类似,都是利用数组有序使用二分进行求解。不过和普通的整体有序数组不同,大家需要先判断 mid 是在左侧有序部分还是右侧有序部分。
这道题也不例外。而由于这道题是求最小值,而不是一个指定的值。我们可以不照搬我的二分讲义中提供的二分模板,而是换一种方式,这样代码会更简洁。
解空间: (l, r)
这样整体模板就是:
和普通旋转数组找指定值类似,我们先判断 mid 在左边有序部分还是右边有序部分。
如果 mid 在左边有序部分,那么直接 l = mid + 1
否则 r = mid
注意由于我们的 mid 是向下取整得到的,因此 r = mid 并不会导致死循环,而 l = mid 则可能会死循环。
另外如果左端点的值小于右端点的值则可以提前退出,这点需要注意。
关键点
如果左端点的值小于右端点的值则可以提前退出
代码
语言支持:Python3
Python3 Code:
复杂度分析
令 n 为数组长度。
时间复杂度:$O(logn)$
空间复杂度:$O(1)$
此题解由 力扣刷题插件 自动生成。
力扣的小伙伴可以关注我,这样就会第一时间收到我的动态啦~
以上就是本文的全部内容了。大家对此有何看法,欢迎给我留言,我有时间都会一一查看回答。更多算法套路可以访问我的 LeetCode 题解仓库:https://github.com/azl397985856/leetcode 。 目前已经 40K star 啦。大家也可以关注我的公众号《力扣加加》带你啃下算法这块硬骨头。
关注公众号力扣加加,努力用清晰直白的语言还原解题思路,并且有大量图解,手把手教你识别套路,高效刷题。
最后更新于