Вступить в клуб →
сложнаявопросЖадные алгоритмы и интервалы

Заметание прямой: почему можно разрывать пары «начало-конец»

Задача про минимальное число переговорок часто решается так:

def min_rooms(intervals):
    starts = sorted(iv[0] for iv in intervals)
    ends = sorted(iv[1] for iv in intervals)
    best = active = 0
    j = 0
    for s in starts:
        while j < len(ends) and ends[j] <= s:
            j += 1
            active -= 1
        active += 1
        best = max(best, active)
    return best

Здесь начала и концы сортируются независимо, то есть связь «этот конец принадлежит этой встрече» теряется. Почему решение при этом остаётся корректным?

  • Это работает только при условии, что все интервалы имеют одинаковую длину, иначе счётчик собьётся
  • Ответ зависит только от максимума одновременно активных встреч, а он определяется порядком событий
  • Это ошибка, дающая завышенный ответ: массивы обязательно надо сортировать как пары «начало-конец»
  • Это работает, потому что после раздельной сортировки интервалы гарантированно перестают пересекаться

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела