Menu
CoddyTech

Non-overlapping Intervals

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

区間 i は starts[i] から ends[i] までです。残りの区間同士が重ならないように、削除する必要がある区間の最小数を返してください。一方の区間が終わる点ともう一方の区間が始まる点が一致するだけの、互いに接している区間は重なりません。

関数

eraseOverlapIntervals(starts: integer-array, ends: integer-array) → integer
startsinteger-array
各区間の開始
endsinteger-array
各区間の終端。開始と同じインデックスにあります
戻り値integer
残りの区間が重ならないように削除する区間の最小数

制約

  • 1 ≤ starts.length == ends.length ≤ 5000
  • -5 × 104 ≤ starts[i] < ends[i] ≤ 5 × 104
  • 区間はソートされていません。2つの区間が同一である場合もあります。

例

入力
starts = [3, 1, 5, 2]ends = [6, 4, 7, 3]
出力
2
説明
開始順では、区間は [1,4]、[2,3]、[3,6]、[5,7] です。接しているだけの [2,3] と [3,6] を残し、ほかの 2 つを削除します。3 つは残せません。[1,4] は [2,3] と重なり、[3,6] は [5,7] と重なるためです。
challenge icon

発展問題

各区間に値があり、重複しない区間の中で合計値を最大にしたいとします。最も早く終了する区間を選ぶ方法は、引き続き有効でしょうか?

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

テスト #1

テスト #2

テスト #3

引数

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

期待される出力

2