LeetCodeEasy- [インタビューの質問09. 2つのスタックでのキューの実装]

2つのスタックを持つキューを実装します。キューの宣言は次のとおりです。2つの関数appendTailとdeleteHeadを実装して、キューの最後に整数を挿入し、キューの先頭にある整数を削除する機能を完了してください。(キューに要素がない場合、deleteHead操作は-1を返します)

例1:

入力:
["CQueue"、 "appendTail"、 "deleteHead"、 "deleteHead"]
[[]、[3]、[]、[]]
出力:[null、null、3、-1]


例2:

输入:
["CQueue"、 "deleteHead"、 "appendTail"、 "appendTail"、 "deleteHead"、 "deleteHead"]
[[]、[]、[5]、[2]、[]、[]]
出力: [null、-1、null、null、5,2]


ヒント:

1 <=値<= 10000
から10000までの呼び出しがappendTailおよびdeleteHeadに対して行われます

ソース:LeetCode(LeetCode)
リンク:https ://leetcode-cn.com/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof
著作権は控除ネットワークに属しています。商用転載の正式な許可書に連絡し、非商用転載の出典を明記してください。

アイデア1:2つのスタック:データスタック+補助スタック

スタックとキューの順序は正反対で、2つのスタックはまったく同じです(2回反転)。

class CQueue:

    def __init__(self):
        self.stack1 = [] # 存数
        self.stack2 = [] # 

    def appendTail(self, value: int) -> None:
        while self.stack1 != []:
            self.stack2.append(self.stack1.pop())
        self.stack2.append(value)
        while self.stack2 != []:
            self.stack1.append(self.stack2.pop())
        return None
    def deleteHead(self) -> int:
        if self.stack1 == []:
            return -1
        else:
            return self.stack1.pop()


# Your CQueue object will be instantiated and called as such:
# obj = CQueue()
# obj.appendTail(value)
# param_2 = obj.deleteHead()

アイデア2:2つのスタック:データスタック+補助スタック(改良)

class CQueue:

    def __init__(self):
        self.stack_in = [] 
        self.stack_out = []

    def appendTail(self, value: int) -> None:
        self.stack_in.append(value)

    def deleteHead(self) -> int:
        if not self.stack_out:
            if not self.stack_in:
                return -1
            while self.stack_in:
                self.stack_out.append(self.stack_in.pop())
        return self.stack_out.pop()

 

公開された314元の記事 ウォン称賛22 ビュー20000 +

おすすめ

転載: blog.csdn.net/qq_39451578/article/details/105341871