py_sliding_window_maximum · Python

▶ Aprender py_sliding_window_maximum (Python) paso a paso · explicación de py_sliding_window_maximum

Código línea a línea

Tres columnas: el código, el trozo del subject o del main que obliga a escribir esa línea, y el por qué.

py_sliding_window_maximum.py
CódigoSubjectPor qué
def sliding_window_maximum(nums: list[int], k: int) -> list[int]:def sliding_window_maximum(nums: list[int], k: int) -> list[int]:Firma del subject.
if k <= 0 or k > len(nums):Handle edge cases (empty array, k <= 0, k > array length)Ventana imposible. Con nums vacío, k > 0 ya es mayor que la longitud.
return []Return empty list for invalid inputsVacía.
result = []Return a list of maximum valuesUn máximo por ventana.
candidates = []Índices de candidatos a máximo, con valores decrecientes de izquierda a derecha. El de la cabeza es el máximo de la ventana actual.
head = 0Índice de la cabeza dentro de candidates. Avanzarlo es "sacar por delante" sin el O(n) de pop(0) ni importar deque.
for i, value in enumerate(nums):Slide a window of size k through the arrayUn elemento por iteración.
while len(candidates) > head and nums[candidates[-1]] <= value:Todo candidato menor o igual al nuevo ya nunca será máximo (el nuevo es más grande y dura más): fuera por la cola.
candidates.pop()Descarto.
candidates.append(i)El nuevo entra por la cola.
if candidates[head] <= i - k:La cabeza se ha salido de la ventana (i - k ya no está dentro): avanzo.
head += 1Siguiente candidato.
if i >= k - 1:Find the maximum element in each window positionA partir de que la primera ventana está completa, emito un máximo por posición.
result.append(nums[candidates[head]])La cabeza es el mayor de la ventana.
return resultMáximos.