旋转数组的最小数

题目描述

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。
输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。
NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。[3,4,5,1,2] -》1

  • 解题思路:
    面试的话最好说一下二分的思路。分类讨论mid值落在各个区间上的情况即可,一共有三种情况。

  • 解题代码:

# -*- coding:utf-8 -*-
class Solution:
    def minNumberInRotateArray(self, rotateArray):
        # write code here
#         x=min(rotateArray)
        l=0
        r=len(rotateArray)-1
        mid=-1
        while l<=r:
            mid=(l+r)//2
            if rotateArray[mid]>rotateArray[r]:# 在前半部上升序列,注意防范取等于的情况。不用比较左边
                l=mid+1
            elif rotateArray[mid]=rotateArray[l] and rotateArray[mid]<=rotateArray[r]:# 在数组末尾纯[1,2,3]情况
                r=mid-1
            
        return rotateArray[r+1]

你可能感兴趣的:(旋转数组的最小数)