Menu
CoddyTech

Non-overlapping Intervals

Otrzymujesz listę przedziałów w postaci dwóch tablic: przedział i rozciąga się od starts[i] do ends[i]. Usuń jak najmniej przedziałów, 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ę.

Napisz funkcję o nazwie eraseOverlapIntervals, która zwraca najmniejszą liczbę przedziałów, które trzeba usunąć.

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
jak najmniej przedziałów do usunięcia, aby pozostałe na siebie nie nachodził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ątków 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 możesz zostawić trzech: [1,4] nakłada się na [2,3], a [3,6] nakłada się na [5,7]; każda trójka spośród tych czterech zawiera jedną z tych par.

lock icon+17 ukrytych testów przy wysłaniu

challenge icon

Pytanie dodatkowe

Załóżmy, że każdy przedział ma również 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ę sprawdzi? Czego użyjesz zamiast tego?

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

Przypadek 1

Przypadek 2

Przypadek 3

Wejście

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

Oczekiwane

2