旋转数组最小值二分查找法
输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
# -*- coding:utf-8 -*-
class Solution:
def minNumberInRotateArray(self, rotateArray):
# write code here
#利用二分查找法查找时,若right < middle ,则意味着右侧数据违背了元素递增的规律,即最小值一定在Middle往后的数据中,left = mid +1
#若right > middle,则意味着middle之后的数据是递增规律,则最小值一定在middle的前面,即right = middle-1
if not rotateArray:
return 0
l = len(rotateArray)
left = 0
right = l-1
while left <= right:
mid =(left + right)>>1
if rotateArray[mid-1]>rotateArray[mid]:
return rotateArray[mid]
elif rotateArray[mid] > rotateArray[right]:
left = mid +1
else:
right = mid -1
return 0