昨天看到道题
有一个严格递增或递减数组
截取后半段逆序加到前面
求原数组开始位置的数
比如
100 90 80 5 6 7 8
结果5
以为二分可做 然而感觉不好做
三分太好理解了 求凹凸函数最值
# -*- coding: utf-8 -*-
def tri_search(nums_list,is_max): #求凹凸函数最值
l,r,mid,mmid = 0,len(nums_list)-1,0,0
while(l<r-2): #剩三个点
mid = (l+r)//2
mmid = (mid+r)//2
if is_max:
if(nums_list[mid] < nums_list[mmid]):
l = mid
else:
r = mmid
else:
if (nums_list[mid] > nums_list[mmid]):
l = mid
else:
r = mmid
mid = (l+r)//2
print(l,r,mid)
if(is_max):
return max(max(nums_list[l],nums_list[r]),nums_list[mid])
else:
return min(min(nums_list[l], nums_list[r]), nums_list[mid])
if __name__ == '__main__':
nums_list = list(map(int, input().split()))
if len(nums_list) <= 2:
print(nums_list[0])
else:
is_max = nums_list[0] < nums_list[1] #是否求最大值
print(tri_search(nums_list,is_max))
#30 20 10 2 3 4 5 6 7 9
#3 1 2
#4 3 1 2
#4 1 2 3