Min Stack (Java)

来源:互联网 发布:淘宝论文修改多少钱 编辑:程序博客网 时间:2024/06/10 18:54

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.
getMin函数要求返回当前栈中最小值,而又有push又有pop,一旦入栈的所有元素中的最小值被pop出后,用变量min很难记录当前栈中的次小值,不适于动态的场景,所以要设计一个栈来记录当前最小的值。一旦这个值被弹出,对应的记录栈中的元素也相应被弹出。

Source
class MinStack {    Stack<Integer> a = new Stack<Integer>();Stack<Integer>minA = new Stack<Integer>();public void push(int x){if(minA.isEmpty()){minA.push(x);}else if(minA.peek() >= x){     //注意等于的时候也要入栈minA.push(x);}a.push(x);//System.out.println(a.peek());}public void pop(){if(!minA.isEmpty() && a.peek().equals(minA.peek())){//isEmpty的返回值是布尔型minA.pop();}if(!a.isEmpty()) a.pop();}public int top(){return a.peek();//peek()返回栈顶元素}public int getMin(){if(!minA.isEmpty())return minA.peek();return 0;}}

Test
public static void main(String[] args){MinStack s = new MinStack();s.push(2);s.push(4);s.push(5);s.push(3);s.push(6);s.pop();s.pop();s.pop();System.out.println(s.getMin());}


0 0
原创粉丝点击