Нашли ошибку?

Поиск релиза

ЛёгкаяНайти ошибку2 ошибкиГлава 1

#бинарный поиск#граничные случаиid: ga-find-release

Номера релизов приложения хранятся в отсортированном списке. Функция find_release(versions, target) бинарным поиском возвращает индекс релиза или -1, если такого нет. В ней две ошибки — найдите и исправьте их.

Примеры

find_release([101, 105, 110, 120], 110)  # 2
find_release([101, 105, 110, 120], 111)  # -1
find_release([], 5)                      # -1

Решение

def find_release(versions: list[int], target: int) -> int:
    """Возвращает индекс target в отсортированном списке versions или -1."""
    low = 0
    high = len(versions) - 1
    while low < high:
        mid = (low + high) // 2
        guess = versions[mid]
        if guess == target:
            return mid
        if guess < target:
            low = mid + 1
        else:
            high = mid - 1
    return low

Можно решать и в своём редакторе: «Скопировать с тестами» и запустите python3 find_release.py — тесты те же, результат покажет ✓ / ✗ и итог.