Бесплатная бета: 30 дней полного доступа, без карты.Зарегистрироваться бесплатно

Мы используем необходимые куки для работы сайта (вход и язык). Формы обратной связи и сообщения об ошибке дополнительно используют Google reCAPTCHA для защиты от спама. Она загружается только если вы согласитесь. Политика конфиденциальности

Полевой справочник

Линия развёртки (подсчёт событий)

O(n log n)

Преврати каждый интервал в событие начала (+1) и событие конца (-1), отсортируй все события по позиции, затем пройди по ним, прибавляя дельты к счётчику, чтобы найти самый загруженный момент.

Сигналы

максимум одновременно пересекающихся встреч/интерваловминимум комнат/ресурсовсамый загруженный момент временисколько интервалов покрывают заданную точкусобытия, происходящие в одно и то же время

Шаблон

function maxOverlap(intervals) {
    const events = [];
    for (const [start, end] of intervals) {
        events.push([start, 1]);
        events.push([end, -1]);
    }
    events.sort((a, b) => a[0] - b[0] || a[1] - b[1]);
    let active = 0;
    let best = 0;
    for (const [, delta] of events) {
        active += delta;
        best = Math.max(best, active);
    }
    return best;
}

Похоже, но не то

  • Интервалы: слияние и вставка: Слияние выдаёт объединённые непересекающиеся диапазоны как итоговый ответ. Линия развёртки не объединяет диапазоны, она считает, сколько активно одновременно, а это нужно для «минимум комнат для встреч», а не для объединённого расписания.

n до 1e5 интервалов -> O(n log n): 2n событий сортируются по позиции, затем один линейный проход.

Изучить этот паттерн