Ниже приведена реализация бинарного поиска, но с ним что-то не так.Найдите его и исправьте, изменив одну строку!
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 array[mid] > value:
return binary_search(array, value, low, mid-1)
Потому что в противном случае, если в массиве только один элемент и элемент> value, он будет бесконечно зацикливаться.Но полученный код все еще помечен как неправильный ответ согласно оценщику!
Другие подозреваемые:
- ';'в
mid = (low + high)/2;
Несмотря на резкое колебание, он все равно прекрасно компилируется (low + high)/2
Поскольку это написано в Python 2.7, это эквивалентно (low + high)//2
в Python 3, верно?Так что никаких проблем здесь ...
Любая помощь приветствуется.Спасибо.