寻找旋转排序数组中的最小值
159. 寻找旋转排序数组中的最小值
假设一个排好序的数组在其某一未知点发生了旋转(比如0 1 2 4 5 6 7 可能变成4 5 6 7 0 1 2)。你需要找到其中最小的元素。
样例
样例 1:
输入:[4, 5, 6, 7, 0, 1, 2] 输出:0 解释: 数组中的最小值为0
思路:
没有重复数, 那么就找旋转的位置在哪里就好
如何判断旋转的位置,就用中间和最后一个来比,如果顺序,那么旋转位置在左边,反之不顺序在右边
最后就把旋转位置一直这样卡到了就剩两个位置 start 和end 直接比较就好
需要注意 上面这样想基于一个假设, 就是发生了旋转。如果没有发生旋转就是首位,所以结果再做一些处理就好。
其实没有发生旋转那么start就是那个首值,但是为了和之前做题思路统一还是这样分析了
代码:
class Solution:
"""
@param nums: a rotated sorted array
@return: the minimum number in the array
"""
def findMin(self, nums):
# write your code here
n = len(nums)
left,right = 0,n-1
while left+1 < right:#最后得到left,right两个值
mid = left+(right-left)//2
if nums[mid] < nums[right]:# 顺序 right = mid
else:
left = mid# 逆序,逆序就start=mid 其实这里应该知道end才是比较小的值,结果可以做一些优化 return min(nums[right],nums[0])