Menu
CoddyTech

Merge Intervals

Дан набор интервалов, каждый из которых представляет собой диапазон целых чисел от начала до конца. Объедините каждую группу перекрывающихся интервалов в один интервал, охватывающий всю группу, и верните объединённые интервалы, отсортированные по началу. Интервалы, которые только соприкасаются, например [1, 4] и [4, 5], считаются перекрывающимися.

Интервалы передаются в виде двух массивов одинаковой длины: интервал i — это [starts[i], ends[i]]. Нужно вернуть двумерный массив — список пар [start, end].

Функция

mergeIntervals(starts: integer-array, ends: integer-array) → integer-2d-array
startsinteger-array
начало каждого интервала
endsinteger-array
конец каждого интервала, с тем же индексом, что и его начало
Возвращаетinteger-2d-array
объединённые интервалы в виде пар [start, end], отсортированные по началу

Ограничения

  • 1 ≤ starts.length == ends.length ≤ 104
  • 0 ≤ starts[i] ≤ ends[i] ≤ 104
  • Интервалы поступают в произвольном порядке.
  • Интервалы, которые только соприкасаются концами, считаются пересекающимися.

Примеры

Ввод
starts = [5, 1, 12, 3]ends = [7, 4, 14, 6]
Вывод
[[1, 7], [12, 14]]
Пояснение
В порядке начала [1, 4] перекрывается с [3, 6], который перекрывается с [5, 7], поэтому три интервала объединяются в [1, 7]. [12, 14] начинается после 7 и остаётся отдельно.
challenge icon

Дополнительный вопрос

Интервалы уже объединены и отсортированы по началу, и тебе нужно добавить один новый интервал. Сможешь вернуть объединённый список за время O(n), не выполняя сортировку повторно?

Сбросить код
def mergeIntervals(starts, ends):
    # Напишите код здесь

Тест #1

Тест #2

Аргументы

starts = [5, 1, 12, 3]
ends = [7, 4, 14, 6]

Ожидаемый вывод

[[1, 7], [12, 14]]