给定一个可以分为两部分的列表L [:z]和L [z:],使得第一个不增加,第二个不减少并且可以包含或不包含重复元素,请创建一个函数,使:
输入:
>如上所述的清单L
>值k,代表列表中重复给定值的最大次数
输出:
>列表的最小值
复杂性要求
> O(log n)
>只能使用内置库函数,不包括最小/最大
我有以下几点:
def findmin(L, k = None):
left = 0
right = len(L)-1
foundmin = False
while not foundmin:
mp = (left + right)//2
if L[mp] > L[mp+1]:
left = mp
elif L[mp-1] < L[mp]:
right = mp+1
else:
return L[mp]
它仅适用于某些列表,例如:
L = [9,9,4,3,2,1,7,7,10,10]
但是它对于诸如以下的列表无法正常工作:
L = [6,5,4,3,3,3,3,3,3,3,3,3,1,7,7,7,7]
我尝试修改该功能以容纳重复的元素,但无济于事.我也没有看到函数的输入k的效用.有什么想法吗?