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.
Example:
MinStack minStack = new MinStack(); minStack.push(-2); minStack.push(0); minStack.push(-3); minStack.getMin(); --> Returns -3. minStack.pop(); minStack.top(); --> Returns 0. minStack.getMin(); --> Returns -2.
思路:在每一个最小值下面放置一个未加入前的最小值(全局次小值)
class MinStack {
/** initialize your data structure here. */
List<Integer> stack;
int min;
/** initialize your data structure here. */
public MinStack() {
stack=new ArrayList<Integer>();
min=Integer.MAX_VALUE;
}
public void push(int x) {
if(x<=min)
{
stack.add(min);
min=x;
}
stack.add(x);
}
public void pop() {
if(stack!=null&&stack.size()!=0)
{
int top=stack.remove(stack.size()-1);
if(top==min)
{
min=stack.remove(stack.size()-1);
}
}
}
public int top() {
if(stack==null||stack.size()==0)
{
return -1;
}
else
{
return stack.get(stack.size()-1);
}
}
public int getMin() {
return min;
}
}