Menu
CoddyTech

Sliding Window Maximum

Otrzymujesz tablicę liczb całkowitych nums i rozmiar okna k. Okno obejmujące k kolejnych wartości zaczyna się na lewym końcu i przesuwa się w prawo o jedną pozycję naraz, aż jego prawa krawędź znajdzie się przy ostatniej wartości. Zwróć największą wartość w oknie na każdej pozycji, od lewej do prawej: n-k+1 wartości dla tablicy o długości n.

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 najbardziej lewego do najbardziej prawego

Ograniczenia

  • 1 ≤ k ≤ nums.length ≤ 2 × 104
  • -104 ≤ nums[i] ≤ 104
  • The result contains nums.length-k+1 values, one for each window, ordered from left to right.

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, więc każde z nich zwraca 12. Gdy wysuwa się z okna, zarówno [3, 8, 5], jak i [8, 5, 1] mają 8 jako największą wartość.
challenge icon

Pytanie dodatkowe

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

Zresetuj kod
def maxSlidingWindow(nums, k):
    # Napisz tutaj kod

Test #1

Test #2

Test #3

Argumenty

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

Oczekiwany wynik

[12, 12, 12, 8, 8]