Diseñe una pila que admita operaciones push, pop, top y que pueda recuperar el elemento más pequeño en tiempo constante.
push(x) - empuja el elemento x a la pila.
pop(): elimina el elemento superior de la pila.
top() - Obtiene el elemento superior de la pila.
getMin(): recupera el elemento más pequeño de la pila.
Fuente: LeetCode
Enlace: https://leetcode-cn.com/problems/min-stack
el código se muestra a continuación:
class MinStack {
private Stack<Integer> s1=new Stack<>();
private Stack<Integer> s2=new Stack<>();
public MinStack() {
}
public void push(int val) {
s1.push(val);
if(s2.isEmpty()){
s2.push(val);
}else {
int temp=s2.peek();
s2.push(Math.min(temp,val));
}
}
public void pop() {
s1.pop();
s2.pop();
}
public int top() {
return s1.peek();
}
public int getMin() {
return s2.peek();
}
}
/**
* Your MinStack object will be instantiated and called as such:
* MinStack obj = new MinStack();
* obj.push(val);
* obj.pop();
* int param_3 = obj.top();
* int param_4 = obj.getMin();
*/
Logrando el resultado: