Stack 设计堆栈,以便获取最小值、弹出值、推送值和;全速前进O(1)

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

所以有人问我这个问题:

考虑ADT堆栈。除了操作推送,Pop 最重要的是,我们希望支持一个新的操作FindMin,它返回最小的 堆栈中的元素。设计数据结构和算法以支持这些 四个操作(Push、Pop、Top和FindMin)中的每一个都需要 恒定时间。无需检查过盈和欠盈情况,无需 给空和满的程序。[提示:使用额外的堆栈。]

因此,我看到了一些答案,但一旦使用FindMin函数,它们似乎都需要O(n)时间。我真的不明白这个暗示想告诉我什么…请帮帮我!!!谢谢

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值){ 如果(值)