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, поэтому оба остаются без изменений.

lock icon+20 скрытых тестов при отправке

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]]