我想在O(log n) complexity
中实现它。使用binary search
的想法可以实现它。我这样说:让L成为一个列表; L= [12,10,9,7,6,5,8,9,11]
所以预期的结果应该是5
。 python
中有一个简单的算法可以做到吗?
def binse(l,lo,hi):
n =len(l)
lo = 0
hi =n
mid =(lo+hi)//2
if (hi-lo)<2:
return lo
if l[mid]<l[mid-1] and l[mid]<l[mid+1]:
return l[mid]
elif l[mid]<l[mid-1] and l[mid]>l[mid+1]:
return binse(l,mid+1,hi)
elif l[mid]>l[mid-1] and l[mid]<l[mid+1]:
return binse(l,lo,mid)
else:
return
l = [13,11,5,6,7,8,9,11,13]
lo =0
hi =len(l)
print(binse(l,lo,hi))
答案 0 :(得分:0)
你说过 - 使用二进制搜索。在每次探测时,取两个连续的条目并确定值是增加还是减少。基于此,您知道哪个区域需要进一步细分。
顺便说一句,我忽略了平等的情况根据发布的代码进行更新:
return lo
行显然是错误的,因为它没有返回数组值第一项是你看到无限递归的原因。
答案 1 :(得分:0)
def mini(lis):
s, e = 0, len(lis)-1
while True:
m = (s+e)/2
if lis[m] > lis[m+1]:
s = m
elif lis[m-1] < lis[m]:
e = m+1
else:
return m
这应该有效。