包含min函数的栈
2018-08-06 本文已影响97人
lvlvforever
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
首先我们可以考虑将最小元素储存在一个变量里,每次进栈首先判断min和进栈元素大小,始终保持min是最小值,但如果有数据出栈,就麻烦了,因为我们没有记录次小的元素。所以还需要有个容器存储当前栈范围内最小的元素。也就是需要两个栈,一个是数据栈,一个是辅助栈。
Stack<Integer> mainStack = new Stack();
Stack<Integer> auxStack = new Stack();
public void push(int node) {
mainStack.push(node);
if (auxStack.isEmpty()) {
auxStack.push(node);
} else {
int curMin = auxStack.peek();
int min = curMin > node ? node : curMin;
auxStack.push(min);
}
}
public void pop() {
if (!mainStack.isEmpty()) {
auxStack.pop();
mainStack.pop();
}
}
public int top() {
if (!mainStack.isEmpty()) {
return mainStack.peek();
}
return -1;
}
public int min() {
if (!auxStack.isEmpty()) {
return auxStack.peek();
}
return -1;
}