Middle — Senior
¿Cómo declarar y mantener el máximo al desplazar la ventana?
sobes.tech AI
Respuesta de la IA
Para mantener el máximo en una ventana al desplazarla, a menudo se utiliza una estructura de datos: una cola doble (deque). La idea es almacenar los índices de los elementos en orden decreciente de sus valores, de modo que:
- Al agregar un nuevo elemento, se eliminan del final de la cola todos los elementos menores que el nuevo, ya que no pueden ser el máximo.
- Al desplazar la ventana, se eliminan del principio de la cola los elementos que han salido del rango de la ventana.
Esto permite obtener el máximo en la ventana actual en O(1), y procesar todo el array en O(n).
Ejemplo en Python:
from collections import deque
def max_sliding_window(nums, k):
dq = deque() # almacena índices
result = []
for i, num in enumerate(nums):
while dq and nums[dq[-1]] < num:
dq.pop()
dq.append(i)
if dq[0] == i - k:
dq.popleft()
if i >= k - 1:
result.append(nums[dq[0]])
return result
# Ejemplo de uso
print(max_sliding_window([1,3,-1,-3,5,3,6,7], 3)) # [3,3,5,5,6,7]