Sliding Window

Intermediate

Tecnica che scorre array o stringhe con una finestra per analizzare sottosequenze senza ricalcoli.

Pattern: Sliding Window

Il pattern Sliding Window prevede l'uso di due puntatori che delimitano una "finestra" mobile all'interno di un array o di una stringa. Muovendo la finestra possiamo mantenere informazioni aggiornate sul contenuto senza dover rielaborare l'intera sequenza ad ogni passo.

🚀 Quando usarlo

Usa lo Sliding Window quando:

  • Vuoi trovare la somma o la media massima di un sottoarray di lunghezza fissa
  • Cerchi la sottostringa più lunga che soddisfa una certa condizione
  • Hai bisogno di contare occorrenze mentre avanzi con la finestra
  • Vuoi ridurre soluzioni bruteforce O(n^2) a O(n)

✏️ Esempio classico: Massima somma in una finestra di k elementi

Esempio ispirato a Leetcode 209. Minimum Size Subarray Sum

def maxSumSubarray(arr, k): window_sum = sum(arr[:k]) max_sum = window_sum for i in range(k, len(arr)): window_sum += arr[i] - arr[i - k] max_sum = max(max_sum, window_sum) return max_sum

✅ Complessità:

  • Tempo: O(n)
  • Spazio: O(1)

🧩 Problemi comuni

NomeDifficoltàPatternLink
Longest Substring Without Repeating CharactersMediumVariabileLeetcode #3
Maximum Average Subarray IEasyFissaLeetcode #643
Minimum Size Subarray SumMediumVariabileLeetcode #209
Permutation in StringMediumVariabileLeetcode #567
Sliding Window MaximumHardFissaLeetcode #239

💡 Consigli utili

  • Aggiorna la finestra aggiungendo l'elemento a destra e rimuovendo quello a sinistra
  • Gestisci con attenzione i casi in cui la dimensione della finestra cambia
  • Ricorda che spesso è utile un dizionario o contatore per tenere traccia dei valori nella finestra

📚 Continua con

👉 Two Pointers →

Unisciti al Viaggio

Ricevi tips settimanali, nuovi pattern e aggiornamenti esclusivi per migliorare costantemente le tue skills algoritmiche

No spam, unsubscribe anytime. Privacy policy compliant.