Ctrl K

Новая бронь в расписании

Средняя
Расписание переговорки — список bookings, где bookings[i] = [start, end] — занятый отрезок времени, включая оба конца. Отрезки отсортированы по началу и не пересекаются друг с другом. Поступила новая бронь extra = [start, end]. Добавьте её в расписание: все отрезки, которые с ней пересекаются или касаются её хотя бы в одной точке, слейте с ней в один. Верните новое расписание — тоже отсортированное и без пересечений. Изменять bookings на месте не обязательно, можно вернуть новый список.
Пример 1
bookings=[[2, 4], [9, 12], [15, 20]], extra=[5, 10] → [[2, 4], [5, 12], [15, 20]]

Новая бронь [5, 10] пересекается с [9, 12] и сливается с ней в [5, 12]; с [2, 4] она не пересекается.

Пример 2
bookings=[[1, 3], [6, 8]], extra=[3, 6] → [[1, 8]]

Отрезки с общей точкой сливаются: всё превращается в [1, 8].

Пример 3
bookings=[], extra=[7, 7] → [[7, 7]]

Броней не было — остаётся только новая.

Ограничения
  • 0 ≤ len(bookings) ≤ 10⁴
  • 0 ≤ start ≤ end ≤ 10⁵ для каждого отрезка и для extra
  • Конец каждого отрезка в bookings меньше начала следующего
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиДве доски и вода СредняяТройки с нулевой суммой СредняяСумма тройки ближе всего к цели СредняяЧетыре числа с заданной суммой СредняяСледующая расстановка по порядку Средняя
загружаем Python…
Вход
bookings=[[2, 4], [9, 12], [15, 20]], extra=[5, 10]
Ожидается
[[2, 4], [5, 12], [15, 20]]

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