剑指offer6:旋转数组的最小数字

思路:

1.先判断数组的长度是否为0,1。

2.然后从数组的头和尾开始遍历。先算出他们的中间下标mid,将中间元素rotateArray[mid]和尾元素rotateArray[high]比较大小。若中间元素大于尾元素则最小元素一定在中间元素的右边即low=mid+1。若中间元素小于尾元素则最小元素要不就是中间元素要么在中间元素右边即high=mid。若中间元素和尾元素相等则high=high-1。依次循环直到结束。

# -*- coding:utf-8 -*-
class Solution:
    def minNumberInRotateArray(self, rotateArray):
        # write code here
        if len(rotateArray)==0:
            return 0
        if len(rotateArray)==1:
            return rotateArray[0]
        low,high=0,len(rotateArray)-1
        while low<=high:
            mid=(low+high)//2
            if rotateArray[mid]>rotateArray[high]:
                low=mid+1
            elif rotateArray[mid]<rotateArray[high]: 
                high=mid
            else:
                high-=1
        return rotateArray[high]

猜你喜欢

转载自blog.csdn.net/weixin_43160613/article/details/84372996
今日推荐