Leetcode C++剣指Offer 09.2つのスタックでキューを実装

5178 ワード

これは私が10年も忘れないテーマかもしれません.誰かが私に2回も話してくれたので、私は理解していません.その日はきっと満腹ではありません.脳は酸素が欠けています.
タイトル
2つのスタックで1つのキューを実現します.キューの宣言は以下のとおりです.2つの関数appendTailとdeleteHeadを実装し、キューの末尾に整数を挿入し、キューの先頭に整数を削除する機能をそれぞれ完了してください.(キューに要素がない場合はdeleteHead操作は-1を返します)
例1:
入力:[[CQueue],[appendTail],[deleteHead],[deleteHead][[],[3],[],[],[]]出力:[null,null,3,-1]例2:
入力:[[CQueue],[deleteHead],[appendTail],[appendTail],[appendTail],[deleteHead],[],[[],[5],[],[],[]]]出力:[null,-1,null,null,null,null,5,2]ヒント:
1<=values<=10000 appendTail、deleteHeadを最大10000回呼び出す
ソース:力ボタン(LeetCode)リンク:https://leetcode-cn.com/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof著作権はインターネットの所有に帰属する.商業転載は公式の授権に連絡してください.非商業転載は出典を明記してください.
構想
  • 2 2つのスタック実装キュー、1つのスタックAは要素を配置し、1つのスタックBは
  • をポップアップするために使用される
  • 桟Bは空で、AのはすべてBまで弾きます;Bは空ではなく、
  • を直接弾くことができます.
    コード#コード#
    class CQueue {
    public:
        stack<int> one;
        stack<int> two;
        CQueue() {
        }
        
        void appendTail(int value) {
            one.push(value);
        }
        
        int deleteHead() {
            if (two.empty()) {
                while(!one.empty()) {
                    two.push(one.top());
                    one.pop();
                }
            }
            if (two.empty())
                return -1;
            int res = two.top();
            two.pop();
            return res;
            
        }
    };
    
    /**
     * Your CQueue object will be instantiated and called as such:
     * CQueue* obj = new CQueue();
     * obj->appendTail(value);
     * int param_2 = obj->deleteHead();
     */