def find_min(num):
left = 0
right = len(num)-1
while left < right:
mid = (left+right)//2
if num[mid]>num[left]:
left = mid +1
elif num[mid] < num[right]:
right = mid
else:
right-=1
return num[left]
num = [3,4,5,1,2]
print(find_min(num))
加一顺序排列
def MinOrder(num,left,right):
result = num[left]
for i in range(right):
if result >num[i]:
result = num[i]
return result
def find_min(num):
left = 0
right = len(num)-1
while left < right:
mid = (left+right)//2
if num[left] == num[right] and num[mid] == num[left]:
return MinOrder(num,left,right)
elif num[mid]>=num[left]:
left = mid +1
elif num[mid] <= num[right]:
right = mid
return num[left]
num = [1,1,1,0,1]
print(find_min(num))
方法二
def find_min(num,length):
left = 0
right = length - 1
mid = 0
while(num[left]>=num[right]):
if rigth - left == 1:
mid = rigth
break
mid = (left + rigth)//2
if num[left] == num[right] and num[mid] == num[left]:
return MinOrder(num,left,right)
if num[mid] >= num[left]:
left = mid
elif num[mid]<=num[right]:
rigth = mid
return num[mid]
num = [1,1,1,0,1]
# num =[3,4,5,1,2]
print(find_min(num,5))