Menu
CoddyTech

Insert Interval

СреднеИнтервалыpython iconjava iconcpp iconc iconjs icon+10

Тебе даны интервалы, отсортированные по началу, в виде двух массивов: интервал i — это [starts[i], ends[i]], и никакие два интервала не перекрываются и не соприкасаются. Вставь новый интервал [newStart, newEnd], объедини его со всеми интервалами, которые он перекрывает или которых касается, и верни все интервалы в виде пар [start, end], отсортированных по началу.

Интервалы соприкасаются, если конец одного совпадает с началом другого, как [2, 4] и [4, 8]; такие интервалы объединяются. [1, 2] и [3, 4] не имеют общих точек, поэтому остаются раздельными.

Функция

insertInterval(starts: integer-array, ends: integer-array, newStart: integer, newEnd: integer) → integer-2d-array
startsinteger-array
начало каждого интервала, в порядке возрастания
endsinteger-array
конец каждого интервала, соответствующие начала
newStartinteger
начало интервала для вставки
newEndinteger
конец интервала для вставки
Возвращаетinteger-2d-array
интервалы после вставки в виде пар [start, end], отсортированные по start

Ограничения

  • 1 ≤ starts.length == ends.length ≤ 2000
  • 0 ≤ starts[i] ≤ ends[i] ≤ 105
  • ends[i] < starts[i+1]: интервалы отсортированы по началу, и никакие два из них не пересекаются и не соприкасаются.
  • 0 ≤ newStart ≤ newEnd ≤ 105

Примеры

Ввод
starts = [1, 5, 10, 15]ends = [3, 7, 12, 18]newStart = 6newEnd = 11
Вывод
[[1, 3], [5, 12], [15, 18]]
Пояснение
[6, 11] пересекается с [5, 7] и [10, 12], поэтому все три объединяются в [5, 12]. [1, 3] заканчивается до 6, а [15, 18] начинается после 12, поэтому оба интервала остаются без изменений.
challenge icon

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

Если вставлять много интервалов один за другим, как хранить их так, чтобы каждая вставка требовала O(log n) плюс один шаг на каждый старый интервал, который она поглощает?

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

Тест #1

Тест #2

Тест #3

Аргументы

starts = [1, 5, 10, 15]
ends = [3, 7, 12, 18]
newStart = 6
newEnd = 11

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

[[1, 3], [5, 12], [15, 18]]