Menu
CoddyTech

Merge Intervals

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

開始から終了までの整数の範囲である区間の集合が与えられます。重なり合う区間の各グループを、グループ全体を含む1つの区間に統合し、開始位置の昇順に並べた統合後の区間を返してください。[1, 4]と[4, 5]のように端点だけが接している区間も、重なり合っているものとして扱います。

区間は同じ長さの2つの配列として与えられます。区間iは[starts[i], ends[i]]です。[start, end]のペアを並べたリストである2次元配列を返してください。

関数

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] と重なるため、3つは [1, 7] になります。[12, 14] は 7 より後に始まるため、単独のままです。
challenge icon

発展問題

区間は開始位置順に並べられ、すでに統合された状態で与えられます。新しい区間を1つ追加してください。再度ソートせずに、O(n) 時間で統合済みのリストを返せますか?

コードをリセット
def mergeIntervals(starts, ends):
    # ここにコードを書いてください

テスト #1

テスト #2

引数

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

期待される出力

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