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.
题目含义:设计一个最小栈,push, pop, top, 和 getMin 方法都是常量时间
1 class MinStack { 2 3 private Queue<Integer> p = new LinkedList<>(); 4 private Integer minValue = Integer.MAX_VALUE; 5 6 /** Initialize your data structure here. */ 7 public MinStack() { 8 } 9 10 public int getMin() { 11 12 for (int i=0;i<p.size();i++) 13 { 14 Integer value = p.poll(); 15 minValue = Math.min(minValue,value); 16 p.add(value); 17 } 18 return minValue; 19 } 20 21 /** Push element x onto stack. */ 22 public void push(int x) { 23 p.add(x); 24 for (int i=1;i<p.size();i++) 25 { 26 p.add(p.poll()); 27 } 28 } 29 30 /** Removes the element on top of the stack and returns that element. */ 31 public int pop() { 32 return p.poll(); 33 } 34 35 /** Get the top element. */ 36 public int top() { 37 return p.peek(); 38 } 39 40 /** Returns whether the stack is empty. */ 41 public boolean empty() { 42 return p.isEmpty(); 43 } 44 }