思路:
使用2个栈,其中一个栈作为普通栈使用,另一个只把最小的元素入栈。
入栈:如果元素小于或等于最小元素栈顶,则入最小元素栈
出栈:如果元素等于最小元素栈顶,则最小元素出栈
Code:
class MinStack {
private Stack<Integer> innerStack;
private Stack<Integer> minStack;
/** initialize your data structure here. */
public MinStack() {
innerStack = new Stack<Integer>();
minStack = new Stack<Integer>();
}
public void push(int x) {
innerStack.push(x);
//add to queue
if (minStack.isEmpty() || x <= minStack.peek()) {
minStack.push(x);
}
}
public Integer pop() {
if (!innerStack.empty()) {
Integer peek = innerStack.pop();
if (peek.equals(minStack.peek())) {
minStack.pop();
}
return peek;
}
return null;
}
public Integer top() {
if (!innerStack.empty()) {
return innerStack.peek();
}
return null;
}
public Integer getMin() {
if (!minStack.empty()) {
return minStack.peek();
}
return null;
}
}