包含min函数的栈
题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
可以使用辅助栈保存依次入栈的最小的数,也可以只使用一个栈。但需要保存上一次最小的数。
- push 时,如小于当前最小值,先把当前最小值压入,再压入当前值,且更新最小值。
- pop 时,如当前就是最小的,需pop两次,因存了上一个最小值。
实现
private static Stack<Integer> stack = new Stack<Integer>();
private static Integer minElement = Integer.MAX_VALUE;
public void push(int node) {
if(stack.empty()){
minElement = node;
stack.push(node);
}else{
if(node<=minElement){
stack.push(minElement);
minElement = node;
}
stack.push(node);
}
}
public void pop() {
if(stack.size() == 0) return;
if(minElement == stack.peek()){
if(stack.size() > 1){
stack.pop();
minElement = stack.peek();
}else{
minElement = Integer.MAX_VALUE;
}
}
stack.pop();
}
public int top() {
return stack.peek();
}
public int min() {
return minElement;
}