二分法:
low 与 mid 比较:
两种情况:1、low > mid :此情况low不必再讨论,但是很可能low +1部分 是最小的。所以low +=1
2、low >=mid : 此情况low部分很可能是最小的,但是由于出现旋转,所以high很可能小于low,
此时出现两种情况:
1、low >high 则我们直接从右半部分考虑,直接low = mid +1
2、low <high 那么我们考虑左半部分,因为很可能左半部分也有小于low的情况。 # -*- coding:utf-8 -*-
class Solution:
def minNumberInRotateArray(self, rotateArray):
if rotateArray == None&nbs***bsp;len(rotateArray) == 0:
return None
low = 0
high = len(rotateArray) -1
while low < high:
mid = (low + high) >> 1
if rotateArray[mid] > rotateArray[low]:
if rotateArray[high] < rotateArray[low]:
low = mid +1
else:
high -=1
elif rotateArray[mid] < rotateArray[high]:
high = mid
else:
low +=1
return rotateArray[low]