min関数のAcWingを備えたスタック

min関数のAcWingを備えたスタック

説明

  • プッシュするように設計されたサポート、ポップ、トップおよび他の操作はO(1)時間でスタック最小要素検索することができます。
    • プッシュ(X) - スタックは、元素Xに挿入され
    • ポップ() ​​- 先頭の要素を削除します
    • トップ() ​​- 先頭の要素を取得します。
    • getMin() - スタック内の最小の要素を取得します

その他:

  • この質問は非常にユニークなサンプル入力と出力されます(ストレンジ)、ターンリンク

ソリューション:

  • スタック。
  • まず、最初の3つは、通常の動作の積み重ねです。有するデータ構造で保存:最初の4つの操作がわずかに見つかった考察を行うことができた後に各過去時間スタックを後に行うことができるように、最小の減少
  • だから、少しのスタックを選択してください。特定のスタックは、新しいレコードの最小を毎回開くことです。直接挿入要素に挿入されたオリジナルのスタック、新たに挿入されたスタックの最大(新しいスタックトップ、要素)。新しいポップトップと元のスタックのポップ・スタックができるとき。
  • Oの複雑性(1)、非常に良いです。
//这题题目给了一个类似封装的东西,你只需要往相应的地方填代码就好了。在C++编译不过没关系
class MinStack {
public:
    /** initialize your data structure here. */
    stack<int> stk1, stk2;
    MinStack() {
        
    }
    
    void push(int x) {
        stk1.push(x);
        if(!stk2.size()) stk2.push(x);
        else stk2.push(min(x, stk2.top()));
    }
    
    void pop() {
        stk1.pop(), stk2.pop();
    }
    
    int top() {
        return stk1.top();
    }
    
    int getMin() {
        return stk2.top();
    }
};

/**
 * Your MinStack object will be instantiated and called as such:
 * MinStack obj = new MinStack();
 * obj.push(x);
 * obj.pop();
 * int param_3 = obj.top();
 * int param_4 = obj.getMin();
 */

おすすめ

転載: www.cnblogs.com/BigYellowDog/p/11300680.html