155.最小栈
题目
设计一个支持 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.
提示:
- -231 <= val <= 231 - 1
- pop、- top和- getMin操作总是在 非空栈 上调用
- push,- pop,- top, and- getMin最多被调用- 3 * 104次
思路
用栈存储正常的值,再用一个栈从大到小存储最小值
代码
class MinStack {private Stack<Integer> stack;private Stack<Integer> minStack;public MinStack() {this.stack = new Stack<>();this.minStack = new Stack<>();}public void push(int val) {stack.push(val);if (!minStack.isEmpty()) {int top = minStack.peek();if (top >= val) minStack.push(val);} else minStack.push(val);}public void pop() {int pop = stack.pop();int top = minStack.peek();if (pop == top) minStack.pop();}public int top() {return stack.peek();}public int getMin() {return minStack.peek();}    
}