【シロ用pythonブラシLeetcode】剣指Offer 09.2つのスタックでキューを実装


剣指Offer 09.2つのスタックでキューを実装
タイトルの説明
2つのスタックで1つのキューを実現します.キューの宣言は以下のとおりです.2つの関数appendTailとdeleteHeadを実装し、キューの末尾に整数を挿入し、キューの先頭に整数を削除する機能をそれぞれ完了してください.(キューに要素がない場合はdeleteHead操作は-1を返します)
例:
入力:[[CQueue],[appendTail],[deleteHead],[deleteHead][[],[3],[],[],[]]出力:[null,null,3,-1]
入力:[[CQueue],[deleteHead],[appendTail],[appendTail],[appendTail],[deleteHead],[],[[],[5],[],[],[]]]出力:[null,-1,null,null,null,null,5,2]
ヒント:
  • 1 <= values <= 10000
  • appendTail、deleteHeadを最大10,000回呼び出す
  • 問題を解く構想.
    また古い顔を塗って、また思わず笑って声を出して、この2,3日欧気はこんなに爆発しましたかはははは.面接で必ず出てくる問題は、剣指offerでも上位にあり、よく知っている私はテーマの説明をしたくないので、フォーマットを調整して面倒なことを言って、次は直接スクリーンショットを考えることができます.
    構想は通常の構想で、どうせ問題の要求の中で構想を限定して死んだ:2つのスタックでキューを実現する.簡単に言えば、2つのスタックを構築し、stack 1は要素がキューに入ることを担当し、stack 2は要素がキューから出ることを担当し、2つのスタックはそれぞれ1つの機能しか担当しておらず、混在してはいけない.強調しなければならないのは、スタックを出るとき、stack 2が空の場合、whileループでstack 1内のすべての要素を持ってきてください.そうしないと、要素がスタックに入ると、順番が乱れます.詳細は何もありませんが、テーマに小さな要求があります.キューに要素がなければ、キューを呼び出すときは-1に戻り、追加するのを忘れないでください.
    問題解決コード:
    class CQueue:
    
        def __init__(self):
            self.stack1 = []  #    
            self.stack2 = []  #    
    
        def appendTail(self, value: int) -> None:
            self.stack1.append(value)
    
        def deleteHead(self) -> int:
            if not self.stack1 and not self.stack2:
                return -1
            if not self.stack2:
                while self.stack1:
                    self.stack2.append(self.stack1.pop())       
            return self.stack2.pop()
    
    
    
    # Your CQueue object will be instantiated and called as such:
    # obj = CQueue()
    # obj.appendTail(value)
    # param_2 = obj.deleteHead()

    以上は私、1つのまじめな白(大神达はコードを见ても感じたはずです)に対して、この问题の理解に対して、みんなを歓迎して讨论して、読むことに感谢します.
    原題リンク:
    https://leetcode-cn.com/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof/