Design a stack that supports push, pop, top, and retrieving the minimum element in constant time.
- push(x) -- Push element x onto stack.
- pop() -- Removes the element on top of the stack.
- top() -- Get the top element.
- getMin() -- Retrieve the minimum element in the stack.
import java.util.Stack; public class MinStack { //runtime = 280ms private int min = Integer.MAX_VALUE; Stack <Integer> stack = new Stack<Integer>(); public void push(int x) { if (x <= min){ //与当前min相比,若小于min,则将此时的min先压入栈中,这样弹出的时候就可以找到 stack.push(min); //如,3,5,min = 3,此时x = 1,1 < 3,先将min=3再压入一次,然后压1 min = x; } stack.push(x); } public void pop() { //此时peek为1,但是1是最小的,若直接出栈,那么min等于什么呢?所以这时候事先压入的3就派上用场了 if (stack.peek()== min){ stack.pop(); //1 弹出 min = stack.peek(); //min = 3 stack.pop(); //将重复的3弹出 } else { stack.pop(); } } public int top() { return stack.peek(); } public int getMin() { return min; } }