Sword hace referencia a la oferta 59. Máximo análisis y código de ventana deslizante [Java]
1. Título
Dada una matriz y el tamaño de la ventana deslizante, encuentre el valor máximo de todas las ventanas deslizantes.
Por ejemplo, si la matriz de entrada {2,3,4,2,6,2,5,1} y el tamaño de la ventana deslizante 3, entonces hay 6 ventanas deslizantes en total, y sus valores máximos son {4, 4,6, 6,6,5};
hay 6 ventanas deslizantes para la matriz {2,3,4,2,6,2,5,1}:
{[2,3,4], 2,6, 2,5, 1}, {2, [3,4,2], 6,2,5,1}, {2,3, [4,2,6], 2,5,1}, {2, 3,4, [2,6,2], 5,1}, {2,3,4,2, [6,2,5], 1}, {2,3,4,2,6, [2 , 5, 1]}.
Dos, análisis y código
1. Cola auxiliar
(1) Pensando
Diseñe una cola auxiliar para almacenar las coordenadas del número que puede convertirse en el valor máximo en la ventana actual. Cuando la ventana se desliza:
1) Si el nuevo número es mayor o igual que el número correspondiente a las coordenadas de cola de la cola actual, muestre los números de cola uno por uno hasta que el nuevo número sea menor que el número de cola o la cola está vacío;
2) Cuando la cola está vacía o el nuevo número es menor que la cola de la cola actual Cuando la coordenada corresponde al número, el número puede convertirse en el valor máximo en la ventana y empujar su coordenada a la cola;
3) Determine si la coordenada del encabezado de la cola todavía está dentro del rango de la ventana, si está fuera del rango, muestre el número del encabezado.
En este momento, el número correspondiente a las coordenadas del encabezado de la cola es el valor máximo en la ventana deslizante.
(2) Código
import java.util.*;
public class Solution {
public ArrayList<Integer> maxInWindows(int [] num, int size)
{
ArrayList<Integer> ans = new ArrayList<>();
if (num.length == 0 || size == 0)
return ans;
ArrayDeque<Integer> deq = new ArrayDeque<>();
for (int i = 0; i < num.length; i++) {
while (!deq.isEmpty() && num[deq.peekLast()] <= num[i])
deq.pollLast();
deq.add(i);
if (deq.peekFirst() + size == i)
deq.pollFirst();
if (i >= size - 1)
ans.add(num[deq.peekFirst()]);
}
return ans;
}
}
(3) Resultados
Tiempo de ejecución: 26ms, memoria ocupada: 9512k.
Tres, otro
Nada.