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

Первый подходящий товар

СредняяДописатьГлава 1

#бинарный поиск#дубликаты#граничные случаиid: ga-first-at-least

Цены товаров отсортированы по возрастанию и могут повторяться. Допишите first_at_least(prices, budget): функция возвращает индекс первой цены, которая не меньше budget. Если такой цены нет, она возвращает len(prices). Пропуски помечены # TODO.

Примеры

prices = [100, 250, 250, 250, 400]
first_at_least(prices, 250)  # 1 — первая из одинаковых
first_at_least(prices, 260)  # 4
first_at_least(prices, 50)   # 0
first_at_least(prices, 500)  # 5 — подходящих нет

Ограничения

Решение

def first_at_least(prices: list[int], budget: int) -> int:
    """Индекс первой цены >= budget в отсортированном списке или len(prices)."""
    low, high = 0, len(prices)  # ответ всегда в диапазоне [low, high]
    while low < high:
        mid = (low + high) // 2
        if ...:  # TODO: условие — цена prices[mid] может быть ответом?
            high = mid
        else:
            low = mid + 1
    return ...  # TODO: что вернуть, когда диапазон сузился до одной точки?

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