题目:有一个长度为N的升序数组,比如[1,2,3,4,5],将它进行旋转,即把一个数组最开始的若干个元素搬到数组的末尾,变成一个旋转数组,比如变成了[3,4,5,1,2],或者[4,5,1,2,3]这样的。请问,给定这样一个旋转数组,求它的最小值。
提示:
1 <= N<= 10000
0 <= rotateArray[i] <= 10000
题目思路是二分法,我没反应过来,看了答案才缓过来,我使用的当然是最原始的方法,遍历数组,然后把最小的找出来,这样避开了题目给的条件和提示,也算是投机取巧吧,但我也想不到别的东西了QAQ`
二分法题解如下
def minNumberInRotateArray(self, rotateArray):
if rotateArray is None:
return 0
if len(rotateArray) == 1:
return rotateArray[0]
start = 0
end = len(rotateArray) - 1
while start < end:
mid = (start + end) // 2
if rotateArray[mid] == rotateArray[end]:
end = end - 1
elif rotateArray[mid] >= rotateArray[end]:
start = mid + 1
else:
end = mid
return rotateArray[start]