题目描述
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。
输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。
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]: # 类似[5,6,1,2,3]的情况
l=l+1
r=mid
elif rotateArray[mid]>=rotateArray[l] and rotateArray[mid]<=rotateArray[r]:# 在数组末尾纯[1,2,3]情况
r=mid-1
return rotateArray[r+1]