问题描述:
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.
解决思路:
借助一个辅助栈空间,每次对主栈进行push操作时,如果入栈的元素小于等于辅助栈的栈顶元素,则该元素同时也被压入辅助栈;
如果出栈的元素值与辅助栈栈顶元素相同,辅助栈同样也要有出栈操作;
每次主栈中的最小值即就是辅助栈的栈顶元素值。
Java代码:
class MinStack {
Stack<Integer> s = new Stack<Integer>();
Stack<Integer> MIN = new Stack<Integer>();
public void push(int x) {
s.push(new Integer(x));
if(MIN.size() == 0)
MIN.push(new Integer(x));
else if(x<=MIN.peek().intValue()){
MIN.push(new Integer(x));
}
}
public void pop() {
if(s.peek().intValue() == MIN.peek().intValue())
MIN.pop();
s.pop();
}
public int top() {
return s.peek();
}
public int getMin() {
return MIN.peek();
}
}