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()