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.
这道题看上去简单,但是注意在出栈的时候,如果min的出去了,怎么破?
class MinStack { Stack<Integer> s = new Stack<Integer>(); Stack<Integer> ms = new Stack<Integer>(); int min = Integer.MAX_VALUE; /** initialize your data structure here. */ public MinStack() { } public void push(int x) { s.push(x); if(min>x){ min = x; } ms.push(min); } public void pop() { s.pop(); ms.pop(); if(s.isEmpty()){ min = Integer.MAX_VALUE; } else{ min = ms.peek(); } } public int top() { return s.peek(); } public int getMin() { return min; } } /** * Your MinStack object will be instantiated and called as such: * MinStack obj = new MinStack(); * obj.push(x); * obj.pop(); * int param_3 = obj.top(); * int param_4 = obj.getMin(); */