Menu
CoddyTech

Insert Interval

ふつう区間python iconjava iconcpp iconc iconjs icon+10

開始位置でソートされた区間が2つの配列として与えられます。区間 i は [starts[i], ends[i]] であり、どの2つの区間も重なったり接したりしていません。新しい区間 [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] と重なるため、3つは [5, 12] になります。[1, 3] は 6 より前に終わり、[15, 18] は 12 より後に始まるため、どちらもそのまま残ります。
challenge icon

発展問題

区間を次々にたくさん挿入する場合、各挿入のコストが O(log n) に加えて、統合される既存の区間ごとに1ステップとなるように、どのように格納しますか?

コードをリセット
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]]