剑指 Offer 11. 旋转数组的最小数字
https://leetcode-cn.com/problems/xuan-zhuan-shu-zu-de-zui-xiao-shu-zi-lcof/
class Solution(object):
def minArray(self, numbers):
"""
:type numbers: List[int]
:rtype: int
"""
if numbers==[]:
return -1
n=len(numbers)
if n==1:
return numbers[0]
#二分查找
left=0
right=n-1
mid=(left+right)//2
while numbers[left]>=numbers[right]:
#print(left,right,mid)
if left+1==right:
return numbers[right]
if numbers[left]==numbers[mid] and numbers[mid]==numbers[right]:#只能顺序查找
min_val=numbers[left]
for i in range(left+1,right):
if numbers[i]<min_val:
min_val=numbers[i]
return min_val
if numbers[mid]>=numbers[left]:
left=mid
else:
right=mid
mid=(left+right)//2
return numbers[0]
class Solution(object):
def minArray(self, numbers):
"""
:type numbers: List[int]
:rtype: int
"""
n=len(numbers)
if n==1:
return numbers[0]
left=0
right=n-1
while left<right:
mid=(left+right)//2
if numbers[mid]>numbers[right]:
left=mid+1
elif numbers[mid]<numbers[right]:
right=mid
else:
right-=1
return numbers[right]