两个栈实现队列
栈:先进后出
队列:先进先出
重点:deleteHead
思路:需要删除时,如果B中有值,pop,否则将A中所有值pop至B
class CQueue:
def __init__(self):
self.A, self.B = [], []
def appendTail(self, value: int) -> None:
self.A.append(value)
def deleteHead(self) -> int:
if self.B:
return self.B.pop()
elif self.A:
while self.A:
self.B.append(self.A.pop())
return self.B.pop()
else:
return -1
包含min函数的栈
重点:push
难点:O(1)
思路:如果只记录当前最小值,最小值pop之后则需要重新寻找最小值
可利用栈的特性,新建一个栈,存入当前位置的最小值。
class MinStack:
def __init__(self):
"""
initialize your data structure here.
"""
self.A = []
self.curmin = []
def push(self, x: int) -> None:
if not self.A:
self.curmin.append(x)
self.A.append(x)
else:
self.A.append(x)
if x<self.curmin[-1]:
self.curmin.append(x)
else:
self.curmin.append(self.curmin[-1])
def pop(self) -> None:
self.curmin.pop()
return self.A.pop()
def top(self) -> int:
return self.A[-1]
def min(self) -> int:
return self.curmin[-1]
不增加额外空间开销:
存入差值
参考: