【发布时间】:2021-09-24 22:19:02
【问题描述】:
我做了一个函数,使用二分搜索计算目标出现的次数。
但是,当我尝试以给定列表中的最后一个元素作为目标运行此函数时,它给了我“列表索引超出范围”的错误。任何人,请帮我解决这个问题。提前致谢。
def binary_occurences(arr, target):
start = 0
end = len(arr)-1
placement = -1
occurence = 0
while start <= end:
center = (start + end)//2
if target == arr[center]:
placement = center
end = center - 1
elif target < arr[center]:
end = center - 1
else:
start = center + 1
if placement == -1:
return 'your target element is not in the list'
else:
while (arr[placement] == target):
placement += 1
occurence += 1
return print("Element", target,"occurs", occurence, "times")
arr = [2,5,5,5,6,7,8,8,9,9,9,9,9,10]
target = 10
binary_occurences(arr, target)
IndexError: 列表索引超出范围
【问题讨论】:
-
while (arr[placement] == target): placement += 1...你需要在那里检查placement是一个有效的索引。 -
你的逻辑有缺陷。如果您在(排序的)列表中对特定值进行二进制搜索并且该值存在,则找到某个事件的索引不一定是最低索引 - 即该索引之前和之后可能还有其他事件。你似乎没有试图解释这一点
-
也许 end = center-1 可以让这个函数找到特定值的最低索引
标签: python python-3.x binary-search