题目要求:
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.
- 即让你设计一个栈,支持push,pop,top和获取最小元素的操作
- 基本思想:借助一个辅助栈记为minStack,存储最小值。原来的栈记为stack。
- 当进行push操作时,如果stack为空,就把元素同时push进stack和minStack,如果stack不为空,将元素正常push进stack,然后获取minStack的栈顶元素,和即将入栈的元素进行比较,将较小者push进minStack
- 当进行pop操作时,两个栈都要pop
- 当进行top操作时,获取stack的栈顶元素即可
- 当要获取栈的最小值时,只要从minStack中获取栈顶元素即可
class MinStack { public Stack<Integer> stack = new Stack<Integer>(); public Stack<Integer> minStack = new Stack<Integer>(); public void push(int x) { if(stack.isEmpty()) { stack.push(x); minStack.push(x); }else { stack.push(x); int min = minStack.peek(); minStack.push(Math.min(x,min)); } } public void pop() { stack.pop(); minStack.pop(); } public int top() { return stack.peek(); } public int getMin() { return minStack.peek(); } }