所以我被问到这个问题:
考虑ADT堆栈。除了Push,Pop之外的操作 和Top,我们想要支持一个新的操作FindMin,它返回最小的 堆栈中的元素。设计数据结构和算法以支持这些 操作使得四个操作(Push,Pop,Top和FindMin)中的每一个都采用 恒定时间。无需检查上下条件,也无需检查 给出Empty和Full的程序。 [提示:使用额外的堆栈。]
所以我看到了一些答案,但是一旦使用了FindMin函数,它们似乎都需要O(n)时间。而且我真的没有得到提示告诉我的内容......请帮助我!!! Thankssss !!
答案 0 :(得分:0)
import java.util.Stack;
public class StackWithMin extends Stack<Integer> {
private Stack<Integer> minStack;
public StackWithMin () {
minStack = new Stack<Integer>();
}
public void push(int value){
if (value <= min()) { // Note the '=' sign here
minStack.push(value);
}
super.push(value);
}
public Integer pop() {
int value = super.pop();
if (value == min()) {
minStack.pop();
}
return value;
}
public int min() {
if (minStack.isEmpty()) {
return Integer.MAX_VALUE;
} else {
return minStack.peek();
}
}
public static void main(String args[]) {
StackWithMin stackWithMin = new StackWithMin();
stackWithMin.push(7);
stackWithMin.push(5);
stackWithMin.push(6);
stackWithMin.push(7);
stackWithMin.push(4);
System.out.println(stackWithMin.min());
stackWithMin.pop();
System.out.println(stackWithMin.min());
}
}