Implémentez une file d'attente avec deux piles. La déclaration de la file d'attente est la suivante: veuillez implémenter ses deux fonctions appendTail et deleteHead pour terminer les fonctions d'insertion d'entiers à la fin de la file d'attente et de suppression d'entiers en tête de la file d'attente. (S'il n'y a aucun élément dans la file d'attente, l'opération deleteHead renvoie -1)
Exemple 1:
输入 :
["CQueue", "appendTail", "deleteHead", "deleteHead"]
[[], [3], [], []]
输出 : [null, null, 3, -1]
Exemple 2:
输入 :
["CQueue", "deleteHead", "appendTail", "appendTail", "deleteHead", "deleteHead"]
[[], [], [5], [2], [], []]
输出 : [null, -1, null, null, 5,2]
Astuces:
1 <= valeurs <= 10000
jusqu'à 10000 appels seront effectués pour appendTail et deleteHead
Source: lien LeetCode (LeetCode)
: https://leetcode-cn.com/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof
. Veuillez contacter l'autorisation officielle pour la réimpression commerciale, et veuillez indiquer la source de la réimpression non commerciale.
Idée 1: deux piles: pile de données + pile auxiliaire
Il faut que l'ordre de la pile et de la file d'attente soit exactement l'inverse, alors les deux piles sont exactement les mêmes (inversées deux fois).
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()
Idée 2: deux piles: pile de données + pile auxiliaire (améliorée)
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()