【发布时间】:2017-02-14 09:34:30
【问题描述】:
在我的二分搜索中,如果找不到目标,我想返回下一个最高元素的索引。
例如[1,2,3,4,5,7],如果我要搜索6,它应该返回7的位置。
我正在测试
aList = [2, 8, 17, 42, 79, 85]
当我搜索 3、18 或 80 时,它可以工作。但是,当我搜索 9、43 或 86 时,它返回的索引比应有的低 1。
def recursiveBinarySearch(aList, first, last, target):
if last - first + 1 <= 0:
return False
else:
midpoint = first + (last - first) // 2
if aList[midpoint] == target:
return midpoint
elif last - first + 1 == 1:
return midpoint
else:
if target < aList[midpoint]:
return recursiveBinarySearch(aList, first, midpoint-1, target)
else:
return recursiveBinarySearch(aList, midpoint+1, last, target)
【问题讨论】:
-
你有什么问题?
-
当我搜索值 9 、 43 、 86 时,索引低于 -1 应该对此感到抱歉
-
bisect.bisect_left(aList, target)。源代码在这里:hg.python.org/cpython/file/2.7/Lib/bisect.py
标签: python algorithm binary-search