Menu
CoddyTech

Sliding Window Maximum

Ti viene fornito un array di numeri interi nums e una dimensione della finestra k. Una finestra di k valori consecutivi inizia dall’estremità sinistra e si sposta verso destra di una posizione alla volta, finché il suo bordo destro non raggiunge l’ultimo valore. Restituisci il valore più grande nella finestra in ogni posizione, da sinistra a destra: n-k+1 valori per un array di lunghezza n.

Funzione

maxSlidingWindow(nums: integer-array, k: integer) → integer-array
numsinteger-array
l’array su cui scorre la finestra
kinteger
il numero di valori in ogni finestra
Restituisceinteger-array
il valore più grande di ogni finestra, dalla finestra più a sinistra a quella più a destra

Vincoli

  • 1 ≤ k ≤ nums.length ≤ 2 × 104
  • -104 ≤ nums[i] ≤ 104
  • Il risultato contiene nums.length-k+1 valori, uno per finestra, in ordine da sinistra a destra.

Esempi

Input
nums = [4, 2, 12, 3, 8, 5, 1]k = 3
Output
[12, 12, 12, 8, 8]
Spiegazione
12 è all'interno delle prime tre finestre, quindi ognuna di esse restituisce 12. Dopo che scivola fuori, [3, 8, 5] e [8, 5, 1] hanno entrambe 8 come valore massimo.
challenge icon

Per approfondire

Riesci a costruire una coda che supporti l’aggiunta di un valore in fondo, la rimozione del valore in testa e la lettura del suo massimo attuale, ciascuna in tempo ammortizzato O(1)?

Ripristina il codice
def maxSlidingWindow(nums, k):
    # Scrivi il codice qui

Test #1

Test #2

Test #3

Argomenti

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

Output atteso

[12, 12, 12, 8, 8]