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.
package leetcode;
import java.util.Stack;
class MinStack {
private Stack<Integer> major = new Stack<Integer>();
private Stack<Integer> mins = new Stack<Integer>();
public void push(int x) {
major.push(x);
if (mins.empty() || x <= mins.peek()){ //考虑值相等的情况
mins.push(x);
}
}
public void pop() {
if (!major.empty()){
if (major.peek().equals(mins.peek())){ //需要用equals
mins.pop();
}
major.pop();
}
}
public int top() {
return major.peek();
}
public int getMin() {
return mins.peek();
}
public static void main(String[] args){
MinStack ms = new MinStack();
ms.push(512);
ms.push(-1024);
ms.push(-1024);
ms.push(512);
ms.pop();
System.out.println(ms.getMin());
ms.pop();
System.out.println(ms.getMin());
ms.pop();
System.out.println(ms.getMin());
}
}