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

Минимум заправок

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

#жадные алгоритмы#граничные случаиid: ga-refuel-stops

Трасса длиной distance км, на ней заправки в точках stations (км от старта, по возрастанию). Полного бака хватает на tank км, стартуем с полным баком. Жадная стратегия: ехать, пока хватает топлива, и заправляться на самой дальней достижимой заправке. Функция refuel_stops(stations, distance, tank) возвращает минимальное число заправок или -1, если не доехать. В ней две ошибки — найдите и исправьте их.

Пример

refuel_stops([100, 200, 350, 450], 600, 250)   # 2: заправки на 200 и 450
refuel_stops([100, 200], 300, 300)             # 0: бака хватает ровно до финиша
refuel_stops([100, 400], 600, 250)             # -1

Решение

def refuel_stops(stations: list[int], distance: int, tank: int) -> int:
    """Минимальное число заправок до финиша или -1."""
    reach = tank  # докуда можно доехать без новой заправки
    stops = 0
    i = 0
    while reach <= distance:
        farthest = None
        while i < len(stations) and stations[i] < reach:
            farthest = stations[i]
            i += 1
        if farthest is None:
            return -1  # ни одной новой заправки в пределах досягаемости
        stops += 1
        reach = farthest + tank
    return stops

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