第一版
class CQueue:
def __init__(self):
self.A, self.B = [], []
def appendTail(self, value: int) -> None:
self.A.append(value)
def deleteHead(self) -> int:
# B为出队列的栈,A为入队列的栈,每次需要将A中的值依次读取到B中,然后从B中
# 如果B中有值,直接返回B中第一个
# python中pop()删除尾数且返回该值
if self.B: return self.B.pop()
# 如果A中没有值,且B也没有,直接返回-1
if not self.A: return -1
# 如果B中没有值,但A中有,将A中的值依次读入B中,并且取出B中第一个值
while self.A:
self.B.append(self.A.pop())
return self.B.pop()
思想
栈:先进后出
队列:先进先出
首先初始化两个空栈。入队的时候,正常将数据压入栈A中。在第一次出队列的时候,对应的应当是将栈A中的值的最后一个输出。因此我们将A中的值正常依次压入B中。然后输出B中的第一个值(此时对应第一个入队列的数)。
第二次出队列的时候,此时就应该直接读取B中的值。
依此类推…
分析
时间复杂度:appendTail()应该是1,deleteHead()应该是n吧
空间复杂度:应该是n吧