# -*- coding:utf-8 -*-
class Solution:
def minNumberInRotateArray(self, rotateArray):
# write code here
"""
# 直接比较,这个时候复杂度为O(n)
minNum = 0
for i in range(len(rotateArray)):
if minNum < rotateArray[i] and minNum != 0 :
minNum = minNum
else:
minNum = rotateArray[i]
return minNum
"""
# 换个思路,用上旋转数组的特性
# 如果中间数字小于最右边的数字,说明从中间开始往右是递增的,那么我们需要查找中间数字的左边
# 如果中间数字大于最右边的数字,说明中间数字的左边是递增的,那么我么需要查找中间数字的右边
# 如果中间数字是小于中间数组前的一个数字,就找到了最小值
if not rotateArray:
return 0
low = 0
high = len(rotateArray)-1
while low <= high:
mid = (low+high)//2
if rotateArray[mid] < rotateArray[mid-1]:
return rotateArray[mid]
if rotateArray[mid] < rotateArray[high]:
# 说明mid右边递增,查询左边
high = mid-1
elif rotateArray[mid] > rotateArray[high]:
#说明mid左边递增,查询右边
low = mid+1
![]()