【发布时间】:2019-03-14 02:36:24
【问题描述】:
下面是二分查找的一个实现,但它有问题。找到它,修改一行就修复它!
def binary_search(array, value, low, high):
if high < low:
return -1
else:
mid = (low + high)/2;
if array[mid] > value:
return binary_search(array, value, low, mid)
elif array[mid] < value:
return binary_search(array, value, mid+1, high)
else:
return mid
array = []
for i in xrange(10000):
array.append(input())
for i in xrange(10000):
value = input()
answer = binary_search(array, value, 0, 9999)
print("%d" % answer)
输入:
输入由长度为 10,000 的排序数组组成,后跟 10,000 个查询。每个整数都在自己的行中给出(总共有 20,000 行)。
保证数组中没有重复。
输出:
对于每个查询值,输出一行包含单个整数的输出:与查询值匹配的索引,如果值不在数组中,则为 -1。
我已经尝试修复这段代码好几天了……我很确定 if 子句中的递归参数是错误的。不应该是:
if array[mid] > value:
return binary_search(array, value, low, mid-1)
因为否则,如果数组中只有一个元素并且元素 > 值,那么它将无限循环。但是根据评估员的说法,生成的代码仍然标记为错误答案!
其他嫌疑人:
- ';'在
mid = (low + high)/2;虽然不和谐,但它仍然编译得很好 -
(low + high)/2因为这是用 python 2.7 编写的,所以它相当于 python 3 中的(low + high)//2对吧?所以这里没问题...
感谢所有类型的帮助。谢谢。
【问题讨论】:
标签: python algorithm python-2.7 binary-search