Menu
CoddyTech

Non-overlapping Intervals

Du erhältst eine Liste von Intervallen als zwei Arrays: Das Intervall i reicht von starts[i] bis ends[i]. Entferne so wenige Intervalle wie möglich, sodass sich keine zwei der verbleibenden Intervalle überschneiden. Zwei Intervalle, die sich nur berühren, bei denen also eines genau an dem Punkt endet, an dem das andere beginnt, überschneiden sich nicht.

Schreibe eine Funktion namens eraseOverlapIntervals, die die kleinste Anzahl von Intervallen zurückgibt, die du entfernen musst.

Funktion

eraseOverlapIntervals(starts: integer-array, ends: integer-array) → integer
startsinteger-array
der Anfang jedes Intervalls
endsinteger-array
das Ende jedes Intervalls, am selben Index wie sein Anfang
Gibt zurückinteger
die geringstmögliche Anzahl an Intervallen, die entfernt werden müssen, damit sich die übrigen nicht überschneiden

Einschränkungen

  • 1 ≤ starts.length == ends.length ≤ 5000
  • -5 × 104 ≤ starts[i] < ends[i] ≤ 5 × 104
  • Die Intervalle sind nicht sortiert. Zwei Intervalle können identisch sein.

Beispiele

Eingabe
starts = [3, 1, 5, 2]ends = [6, 4, 7, 3]
Ausgabe
2
Erklärung
In Startreihenfolge lauten die Intervalle [1,4], [2,3], [3,6] und [5,7]. Behalte [2,3] und [3,6], die sich nur berühren, und entferne die anderen 2. Du kannst nicht drei behalten: [1,4] überschneidet sich mit [2,3] und [3,6] überschneidet sich mit [5,7], und beliebige drei der vier enthalten eines dieser Paare.

lock icon+17 versteckte Tests beim Einreichen

challenge icon

Weiterführende Frage

Angenommen, jedes Intervall hat außerdem einen Wert, und du möchtest den größtmöglichen Gesamtwert der sich nicht überlappenden Intervalle erzielen. Funktioniert es immer noch, das Intervall zu behalten, das zuerst endet? Was würdest du stattdessen verwenden?

Code zurücksetzen
def eraseOverlapIntervals(starts, ends):
    # Schreibe hier den Code
Testfälle

Fall 1

Fall 2

Fall 3

Eingabe

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

Erwartet

2