Stack 设计堆栈,以便获取最小值、弹出值、推送值和;全速前进O(1)
所以有人问我这个问题: 考虑ADT堆栈。除了操作推送,Pop 最重要的是,我们希望支持一个新的操作FindMin,它返回最小的 堆栈中的元素。设计数据结构和算法以支持这些 四个操作(Push、Pop、Top和FindMin)中的每一个都需要 恒定时间。无需检查过盈和欠盈情况,无需 给空和满的程序。[提示:使用额外的堆栈。] 因此,我看到了一些答案,但一旦使用FindMin函数,它们似乎都需要O(n)时间。我真的不明白这个暗示想告诉我什么…请帮帮我!!!谢谢Stack 设计堆栈,以便获取最小值、弹出值、推送值和;全速前进O(1),stack,adt,Stack,Adt,所以有人问我这个问题: 考虑ADT堆栈。除了操作推送,Pop 最重要的是,我们希望支持一个新的操作FindMin,它返回最小的 堆栈中的元素。设计数据结构和算法以支持这些 四个操作(Push、Pop、Top和FindMin)中的每一个都需要 恒定时间。无需检查过盈和欠盈情况,无需 给空和满的程序。[提示:使用额外的堆栈。] 因此,我看到了一些答案,但一旦使用FindMin函数,它们似乎都需要O(n)时间。我真的不明白这个暗示想告诉我什么…请帮帮我!!!谢谢 import java.util.St
import java.util.Stack;
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());
}
公共类StackWithMin扩展堆栈{
私有堆栈minStack;
公共StackWithMin(){
minStack=新堆栈();
}
公共无效推送(int值){
如果(值)