day3-20221026
题目信息来源:
作者:Krahets
链接:https://leetcode.cn/leetbook/read/illustration-of-algorithm
来源:力扣(LeetCode)
剑指 Offer 09. 用两个栈实现队列
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )
输入:
[“CQueue”,“appendTail”,“deleteHead”,“deleteHead”,“deleteHead”]
[[],[3],[],[],[]]
输出:
[null,null,3,-1,-1]
这个输入可能比较难懂,第一行是创建类或者调用类的函数,第二行是对于调用append Tail函数时输入的值
输出部分,如果调用的函数没有return就是null,否则就是根据要求返回
题解一
投机的做法,现在看来是用来list本来就有的队列功能,emmm,但是不能直接append,很疑惑。题目要求是用栈功能。相当于python默认的pop和append。
class CQueue:
def __init__(self):
self.queue = []
def appendTail(self, value: int) -> None:
self.queue.insert(0, value)
def deleteHead(self) -> int:
return self.queue.pop(-1) if self.queue else -1
# Your CQueue object will be instantiated and called as such:
# obj = CQueue()
# obj.appendTail(value)
# param_2 = obj.deleteHead()
题解
这个就是用append和pop实现的,需要用两个栈A、B,其中栈A出栈至栈B,直到A空,对栈B出栈,就相当于去掉队伍的队首。
class CQueue:
def __init__(self):
self.stack_a = []
self.stack_b = []
def appendTail(self, value: int) -> None:
self.stack_a.append(value)
def deleteHead(self) -> int:
if self.stack_b:
return self.stack_b.pop()
if self.stack_a:
while self.stack_a:
self.stack_b.append(self.stack_a.pop())
return self.stack_b.pop()
else:
return -1