No estoy tratando de resolver el problema 739, las temperaturas diarias en LeetCode. https://leetcode.com/problems/daily-temperatures/
Mi código para contenedores Pila proporcionada por el JAVA. Se tarda 60 ms a plazo. Este es mi código:
class Solution {
public int[] dailyTemperatures(int[] T) {
int[] ret = new int[T.length];
Stack<Integer> stack = new Stack<Integer>();
for(int i=0; i < T.length; i++){
while(!stack.isEmpty() && T[i] > T[stack.peek()]){
int index = stack.pop();
ret[index] = i - index;
}
stack.push(i);
}
return ret;
}
}
Aquí es un código que sólo tiene 6 ms a plazo:
class Solution {
public int[] dailyTemperatures(int[] T) {
int[] temperatures = T;
if(temperatures == null) return null;
int[] result = new int[temperatures.length];
int[] stack = new int[temperatures.length];
int top = 0;
stack[top] = -1;
for(int i = 0; i < temperatures.length; i++) {
while(stack[top] != -1 && temperatures[i] > temperatures[stack[top]]) {
int index = stack[top--];
result[index] = i - index;
}
stack[++top] = i;
}
return result;
}
}
¿Por qué la construcción de la pila utilizando una matriz es más rápido que usar el contenedor de pila?
Java Stack
es una muy vieja clase, introducido de nuevo en el JDK 1.0. Se extiende Vector
, y todas sus métodos de manipulación de datos son synchronized
, creando una sobrecarga de rendimiento muy considerable. Si bien no está oficialmente obsoleta, es obsoleta, y que realmente no debería estar utilizando en este día y edad. El moderno ArrayDeque
proporciona la misma funcionalidad sin la sobrecarga de sincronización.