Menu
CoddyTech

Non-overlapping Intervals

Przedział i rozciąga się od starts[i] do ends[i]. Zwróć najmniejszą liczbę przedziałów, które musisz usunąć, aby żadne dwa z pozostałych się nie nakładały. Dwa przedziały, które tylko się stykają, gdy jeden kończy się dokładnie w punkcie, w którym zaczyna się drugi, nie nakładają się.

Funkcja

eraseOverlapIntervals(starts: integer-array, ends: integer-array) → integer
startsinteger-array
początek każdego przedziału
endsinteger-array
koniec każdego przedziału, pod tym samym indeksem co jego początek
Zwracainteger
najmniejsza liczba przedziałów do usunięcia, aby pozostałe się nie nakładały

Ograniczenia

  • 1 ≤ starts.length == ends.length ≤ 5000
  • -5 × 104 ≤ starts[i] < ends[i] ≤ 5 × 104
  • Przedziały nie są posortowane. Dwa przedziały mogą być identyczne.

Przykłady

Wejście
starts = [3, 1, 5, 2]ends = [6, 4, 7, 3]
Wyjście
2
Wyjaśnienie
W kolejności początkowej przedziały to [1,4], [2,3], [3,6] i [5,7]. Zostaw [2,3] i [3,6], które tylko się stykają, a pozostałe 2 usuń. Nie mogą zostać trzy: [1,4] nachodzi na [2,3], a [3,6] nachodzi na [5,7].
challenge icon

Pytanie dodatkowe

Załóżmy, że każdy przedział ma swoją wartość, a Ty chcesz uzyskać jak największą łączną wartość spośród niepokrywających się przedziałów. Czy wybór przedziału, który kończy się najwcześniej, nadal się sprawdza?

Zresetuj kod
def eraseOverlapIntervals(starts, ends):
    # Napisz kod tutaj

Test #1

Test #2

Test #3

Argumenty

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

Oczekiwany wynik

2