Min Stack

  

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.

解题
使用2个栈s1,s2:
s1负责正常栈的储存。
s2储存每次出现最小的数的。
这样当s1删除到最小的数的时候,s2也删除栈顶的数。这样可以保证s2的栈顶一直是当前最小数。因为即使s1里面包含的当前第二小的数而s2不包含,需要用到这个第二小的数的时候,这个数早就被删除了。比如:
s1: 栈顶(2->1->3->4);
s2: 栈顶(1->3->4);
当删除1时,2早就不在s1中,所以接下来最小数是3。
 
class MinStack {
    
    Stack<Integer> element = new Stack<Integer>();
    Stack<Integer> minStack = new Stack<Integer>();
    public void push(int x) 
    {
        element.add(x);
        if (minStack.isEmpty() || x <= minStack.peek()) 
        {
           minStack.add(x);
        }
    }

    public void pop() 
    {
        if(element.isEmpty()) return;
        if (element.peek().equals(minStack.peek())) 
        {
             minStack.pop();
        }
        element.pop();
    }

    public int top() 
    {
        return element.peek();
        
    }

    public int getMin() 
    {
        return minStack.peek();
        
    }
}

reference:
作者:黑山老水
链接:https://www.jianshu.com/p/67f2c14accda
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
原文地址:https://www.cnblogs.com/hygeia/p/10090163.html