Menu
CoddyTech

Insert Interval

ŚredniePrzedziałypython iconjava iconcpp iconc iconjs icon+10

Otrzymujesz przedziały posortowane według początku jako dwie tablice: przedział i to [starts[i], ends[i]], a żadne dwa przedziały się nie nakładają ani nie stykają. Wstaw nowy przedział [newStart, newEnd], połącz go z każdym przedziałem, z którym się nakłada lub styka, i zwróć wszystkie przedziały jako pary [start, end] posortowane według początku.

Przedziały stykają się, gdy koniec jednego wypada tam, gdzie zaczyna się drugi, jak w przypadku [2, 4] i [4, 8], a stykające się przedziały są łączone. [1, 2] i [3, 4] nie mają wspólnych punktów, więc pozostają rozdzielone.

Funkcja

insertInterval(starts: integer-array, ends: integer-array, newStart: integer, newEnd: integer) → integer-2d-array
startsinteger-array
początki każdego przedziału, w kolejności rosnącej
endsinteger-array
koniec każdego przedziału, odpowiadające mu początki
newStartinteger
początek przedziału do wstawienia
newEndinteger
koniec przedziału do wstawienia
Zwracainteger-2d-array
przedziały po wstawieniu jako pary [start, end], posortowane według start

Ograniczenia

  • 1 ≤ starts.length == ends.length ≤ 2000
  • 0 ≤ starts[i] ≤ ends[i] ≤ 105
  • ends[i] < starts[i+1]: przedziały są posortowane według początku i żadne dwa z nich nie nakładają się ani nie stykają.
  • 0 ≤ newStart ≤ newEnd ≤ 105

Przykłady

Wejście
starts = [1, 5, 10, 15]ends = [3, 7, 12, 18]newStart = 6newEnd = 11
Wyjście
[[1, 3], [5, 12], [15, 18]]
Wyjaśnienie
[6, 11] nakłada się na [5, 7] i [10, 12], więc te trzy przedziały stają się [5, 12]. [1, 3] kończy się przed 6, a [15, 18] zaczyna się po 12, więc oba pozostają bez zmian.
challenge icon

Pytanie dodatkowe

Jeśli wstawisz wiele przedziałów jeden po drugim, jak je przechowywać, aby każde wstawienie kosztowało O(log n) plus jeden krok na każdy stary przedział, który pochłonie?

Zresetuj kod
def insertInterval(starts, ends, newStart, newEnd):
    # Wpisz kod tutaj

Test #1

Test #2

Test #3

Argumenty

starts = [1, 5, 10, 15]
ends = [3, 7, 12, 18]
newStart = 6
newEnd = 11

Oczekiwany wynik

[[1, 3], [5, 12], [15, 18]]