面试题11:旋转数组的最小数字

# -*- coding:utf-8 -*-
class Solution:
    def minNumberInRotateArray(self, rotateArray):
        # write code here
        """
        # 直接比较,这个时候复杂度为O(n)
        minNum = 0
        for i in range(len(rotateArray)):
            if minNum < rotateArray[i] and minNum != 0 :
                minNum = minNum 
            else:
                minNum = rotateArray[i]
        return minNum
        """
        
        # 换个思路,用上旋转数组的特性
        # 如果中间数字小于最右边的数字,说明从中间开始往右是递增的,那么我们需要查找中间数字的左边
        # 如果中间数字大于最右边的数字,说明中间数字的左边是递增的,那么我么需要查找中间数字的右边
        # 如果中间数字是小于中间数组前的一个数字,就找到了最小值
        if not rotateArray:
            return 0
        
        low = 0
        high = len(rotateArray)-1
        while low <= high:
            mid = (low+high)//2
            if rotateArray[mid] < rotateArray[mid-1]:
                return rotateArray[mid]
            if rotateArray[mid] < rotateArray[high]:
                # 说明mid右边递增,查询左边
                high = mid-1
            elif rotateArray[mid] > rotateArray[high]:
                #说明mid左边递增,查询右边
                low = mid+1

  

 

posted @ 2019-08-04 11:31  lililili——  阅读(162)  评论(0)    收藏  举报