寻找旋转排序数组中的最小值

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]) 

全部评论

相关推荐

牛客78682892...:直接点还好,总比要了简历也不回的强
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务