Ctrl K

Перенести одну встречу ради перерыва

Средняя
Рабочий день длится с момента 0 до момента day_end. В нём n непересекающихся встреч, отсортированных по времени: i-я занимает отрезок [starts[i], ends[i]]. Можно перенести **не больше одной** встречи на любое другое время. Перенесённая встреча сохраняет длительность, остаётся внутри рабочего дня и не должна пересекаться с остальными. В отличие от простого сдвига, её разрешено поставить в любое место — хоть до, хоть после других встреч. Верните наибольшую возможную длину непрерывного свободного промежутка внутри дня.
Пример 1
day_end=12, starts=[0, 3, 10], ends=[2, 4, 11] → 8

Встречу [3, 4] переносим в самый конец дня, на [11, 12]. Тогда с 2 до 10 ничего нет — перерыв длиной 8.

Пример 2
day_end=9, starts=[1, 4], ends=[3, 8] → 2

Свободные куски по 1 единице, и ни одна встреча в чужой промежуток не помещается. Остаётся только придвинуть встречу, склеив два соседних промежутка: например, [1, 3] → [0, 2] освобождает [2, 4].

Пример 3
day_end=3, starts=[0, 1], ends=[1, 3] → 0

Встречи занимают весь день, свободного времени нет.

Ограничения
  • 1 ≤ day_end ≤ 10⁹
  • 2 ≤ n = len(starts) = len(ends) ≤ 10⁵
  • 0 ≤ starts[i] < ends[i] ≤ day_end
  • ends[i] ≤ starts[i + 1]
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиВыровнять банки СредняяСамая сильная команда СредняяСдвиг отрезка ради совпадений СредняяКрасота клумб на бюджете СложнаяПодтянуть уровни поодиночке и парами Сложная
загружаем Python…
Вход
day_end=12, starts=[0, 3, 10], ends=[2, 4, 11]
Ожидается
8

«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 113 тестов на сервере, включая скрытые.