我正在尝试编写一个二进制搜索,它采用排序列表并找到小于目标值的最大数字:
def binary_max(list, target)
hi=len(list)-1
lo=0
while lo<=hi:
mid=(hi+lo)//2
midval=list[mid]
if midval > target:
hi=mid-1
elif midval <= target:
lo=mid
if hi==lo:
break
return(list[mid])
pass
然而,例如,当存在长度为2的列表时,hi = 1并且中间值将总是卡在lo上 无论如何都要避免这个问题?
感谢
答案 0 :(得分:2)
bisect
模块提供了完全相同的功能。使用bisect.bisect。
答案 1 :(得分:1)
这是一个简单的功能。希望它有效:
def bin_search(list, target):
if target not in list:
return None
list.sort()
return list[list.index(target)-1]
答案 2 :(得分:0)
当break
退出循环时,mid
仍然包含上一次迭代的值。
答案 3 :(得分:0)
你可以找到小于目标值的最大数字如下:
n = int(input())
arr = map(int, input().split())
arr = list(arr)
indices = [v for i,v in enumerate(arr) if v != max(arr)]
print(max(indices))
在这里,我演示了列表中的目标值 = 最大值。您可以将最大值更改为您想要的任何目标值。