Menu
CoddyTech

Merge Intervals

Otrzymujesz zestaw przedziałów, z których każdy obejmuje liczby całkowite od początku do końca. Połącz każdą grupę nakładających się przedziałów w jeden przedział obejmujący całą grupę i zwróć połączone przedziały posortowane według początku. Przedziały, które tylko się stykają, takie jak [1, 4] i [4, 5], uznaje się za nakładające się.

Przedziały są przekazywane jako dwie tablice o tej samej długości: przedział i to [starts[i], ends[i]]. Zwracasz tablicę 2D, czyli listę par [start, end].

Funkcja

mergeIntervals(starts: integer-array, ends: integer-array) → integer-2d-array
startsinteger-array
początek każdego przedziału
endsinteger-array
koniec każdego przedziału, pod tym samym indeksem co jego początek
Zwracainteger-2d-array
połączone przedziały jako pary [start, end], posortowane według początku

Ograniczenia

  • 1 ≤ starts.length == ends.length ≤ 104
  • 0 ≤ starts[i] ≤ ends[i] ≤ 104
  • Przedziały pojawiają się w dowolnej kolejności.
  • Przedziały, które stykają się tylko końcami, uznaje się za nakładające się.

Przykłady

Wejście
starts = [5, 1, 12, 3]ends = [7, 4, 14, 6]
Wyjście
[[1, 7], [12, 14]]
Wyjaśnienie
W kolejności rozpoczęcia [1, 4] nakłada się na [3, 6], które nakłada się na [5, 7], więc te trzy przedziały tworzą [1, 7]. [12, 14] zaczyna się po 7 i pozostaje osobno.
challenge icon

Pytanie dodatkowe

Przedziały są już scalone i posortowane według początku, a Ty musisz dodać jeden nowy przedział. Czy potrafisz zwrócić scaloną listę w czasie O(n), bez ponownego sortowania?

Zresetuj kod
def mergeIntervals(starts, ends):
    # Wpisz kod tutaj

Test #1

Test #2

Argumenty

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

Oczekiwany wynik

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