设计一个支持push,pop,top操作,并能在常数时间内检索到最小元素的栈。
实现MinStack类:
MinStack()初始化堆栈对象。void push(int val)将元素val推入堆栈。void pop()删除堆栈顶部的元素。int top()获取堆栈顶部的元素。int getMin()获取堆栈中的最小元素。
示例 1:
输入:
["MinStack","push","push","push","getMin","pop","top","getMin"] [[],[-2],[0],[-3],[],[],[],[]]
输出:[null,null,null,null,-3,null,0,-2]
解释:
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin(); --> 返回 -3.
minStack.pop();
minStack.top(); --> 返回 0.
minStack.getMin(); --> 返回 -2.
思路:就是栈的几个相关常规操作,注意常数复杂度获取最小值用辅助栈,栈顶是最小元素
class MinStack { Stack<Integer> stack; Stack<Integer> min;// 常数复杂度获取最小值用辅助栈,栈顶是最小元素*** public MinStack() { stack = new Stack<>(); min = new Stack<>(); } public void push(int val) { stack.push(val); if(min.empty() || val <= min.peek()) min.push(val); } public void pop() { if(min.peek().equals(stack.peek())) min.pop(); stack.pop(); } public int top() { return stack.peek(); } public int getMin() { return min.peek(); } }