Menu
CoddyTech

Sliding Window Maximum

Otrzymujesz tablicę liczb całkowitych nums oraz rozmiar okna k. Okno obejmuje k kolejnych wartości. Zaczyna się na lewym końcu tablicy i za każdym razem przesuwa się o jedną pozycję w prawo, aż jego prawa krawędź znajdzie się przy ostatniej wartości.

Zwróć tablicę zawierającą największą wartość w oknie na każdej z jego pozycji, od lewej do prawej. Tablica o długości n ma n-k+1 okien, więc wynik zawiera n-k+1 wartości.

Funkcja

maxSlidingWindow(nums: integer-array, k: integer) → integer-array
numsinteger-array
tablica, po której przesuwa się okno
kinteger
liczba wartości w każdym oknie
Zwracainteger-array
największa wartość w każdym oknie, od okna najbardziej po lewej do okna najbardziej po prawej

Ograniczenia

  • 1 ≤ k ≤ nums.length ≤ 2 × 104
  • -104 ≤ nums[i] ≤ 104
  • Wynik zawiera nums.length-k+1 wartości, po jednej dla każdego okna, w kolejności od lewej do prawej.

Przykłady

Wejście
nums = [4, 2, 12, 3, 8, 5, 1]k = 3
Wyjście
[12, 12, 12, 8, 8]
Wyjaśnienie
12 znajduje się w pierwszych trzech oknach: [4, 2, 12], [2, 12, 3] i [12, 3, 8]. Gdy wypada z okna, w oknach [3, 8, 5] i [8, 5, 1] największą wartością jest 8.

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

challenge icon

Pytanie dodatkowe

Czy potrafisz zbudować kolejkę, która obsługuje dodawanie wartości na końcu, usuwanie wartości z początku i odczytywanie jej bieżącej wartości maksymalnej, każdą z tych operacji w zamortyzowanym czasie O(1)?

Zresetuj kod
def maxSlidingWindow(nums, k):
    # Wpisz kod tutaj
Przypadki testowe

Przypadek 1

Przypadek 2

Przypadek 3

Wejście

nums = [4, 2, 12, 3, 8, 5, 1]
k = 3

Oczekiwane

[12, 12, 12, 8, 8]