Поиск максимального количества одновременно находящихся в отеле гостей

Используйте события заезда +1 и выезда −1, отсортированные по дате. При совпадении дат сначала обрабатывайте выезд, если день выезда уже не считается проживанием.

Короткий ответ

Что ответить на собеседовании

Используйте события заезда +1 и выезда −1, отсортированные по дате. При совпадении дат сначала обрабатывайте выезд, если день выезда уже не считается проживанием.

Подробный разбор

Ответ с пояснениями

Условие

Дан массив пар, где каждая пара представляет день заезда и день выезда конкретного гостя. Требуется реализовать программу, которая определит наибольшее число гостей, находившихся в отеле в один и тот же день.

Пример входных данных: {0, 11}, {0, 2}, {1, 3}

{0, 11}:

  • заезд в день 0
  • выезд в день 11

Ответ программы – максимальное количество одновременно проживающих гостей.

Ответ

Используйте события заезда +1 и выезда −1, отсортированные по дате. При совпадении дат сначала обрабатывайте выезд, если день выезда уже не считается проживанием.

Для полуоткрытых интервалов [заезд, выезд) решение:

int maxGuests(const std::vector<std::pair<int, int>>& stays) {
    std::vector<std::pair<int, int>> events;
    for (auto [arrival, departure] : stays) {
        if (arrival >= departure) continue;
        events.emplace_back(arrival, 1);
        events.emplace_back(departure, -1);
    }
    std::sort(events.begin(), events.end());
    int current = 0, best = 0;
    for (auto [day, delta] : events) {
        current += delta;
        best = std::max(best, current);
    }
    return best;
}

Пример даёт 3. Время O(n log n), память O(n). Здесь пустые или обратные интервалы пропускаются; в прикладном коде обратные даты лучше отклонять при валидации. Если день выезда включён, порядок событий меняется.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее