最小スタック (155) ソリューション

トピック

ここに画像の説明を挿入

分析する

この質問のpushpop、およびtop演算はすべて、Stackや などのクラスでサポートできDeque、それらの時間計算量は ですO(1)問題はgetMain方法にあり、スタック内の最小要素を取得するために、最小値を見つけるためにスタック領域全体を走査する時間計算量が である場合、O(n)時間計算量を最適化するために補助スタックが必要ですO(1)

プッシュ操作

ここに画像の説明を挿入
補助スタックの動作は元のスタックの動作と同じですが、補助スタックのデータの値は補助スタックの現在の値と同じpushである最小值内の最小値を取得するときに、peekスタックの最上位データは補助スタックから直接取得できます。

補助スタックのステップは元のスタックのステップと同じであり、push両方がpop同期されて2 つのスタックの同じ動作が実現されます入栈操作は単純で、判断する必要はなく、2つのスタックを進めるだけで、絵を描く必要もありません。以下のコードを参照してください。出栈poppop

コード

辅助栈初始化时需要写入一个最大值,否则第一次比对栈顶没有内容会报错。
class MinStack {
    
    

    ArrayDeque<Integer> stack;
    ArrayDeque<Integer> minStack;

    public MinStack() {
    
    
        stack = new ArrayDeque<>();
        minStack = new ArrayDeque<>();
        minStack.push(Integer.MAX_VALUE);
    }

    public void push(int val) {
    
    
        stack.push(val);
        minStack.push(Math.min(minStack.peek(), val));
    }

    public void pop() {
    
    
        stack.pop();
        minStack.pop();
    }

    public int top() {
    
    
        return stack.peek();
    }

    public int getMin() {
    
    
        return minStack.peek();
    }
}

おすすめ

転載: blog.csdn.net/AnNanDu/article/details/126847127