题目描述
设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。
push(x) —— 将元素 x 推入栈中。
pop() —— 删除栈顶的元素。
top() —— 获取栈顶元素。
getMin() —— 检索栈中的最小元素。
方法:
辅助栈
在push的时候,如果辅助栈为空或者元素x小于或等于辅助栈的栈顶元素(peek()),则辅助栈也加进该值。
在pop的时候,如果弹出的元素和辅助栈栈顶元素相同(用equals()),则辅助栈也弹出。
top: 返回栈顶元素(peek())
getMin() 返回辅助栈的栈顶元素(peek())
代码:
class MinStack {
Stack<Integer> s ;
Stack<Integer> min_s;
/** initialize your data structure here. */
public MinStack() {
s = new Stack<>();
min_s = new Stack<>();
}
public void push(int val) {
s.push(val);
if(min_s.isEmpty() || min_s.peek() >= val){
min_s.push(val);
}
}
public void pop() {
if(s.pop().equals(min_s.peek())){
min_s.pop();
}
}
public int top() {
return s.peek();
}
public int getMin() {
return min_s.peek();
}
}