剑指offer09.用两个栈实现队列
不难,但自己对于python面向对象的掌握还有欠缺。中间也没有考虑周全。思路虽然有了,但编写代码的时候错误还蛮多的。
另外,特别要考虑到如过队列加入,删除再进入再删除情况下的情况。
class CQueue:
def __init__(self):
self.stack_1 = []
self.stack_2 = []
def appendTail(self, value: int) -> None:
self.stack_1.append(value)
def deleteHead(self) -> int:
if len(self.stack_2) == 0 and len(self.stack_1) != 0 :
for i in range(len(self.stack_1)):
self.stack_2.append(self.stack_1.pop())
return self.stack_2.pop()
elif len(self.stack_2) != 0:
return self.stack_2.pop()
else:
return 0
剑指 Offer 30. 包含 min 函数的栈
解题思路:建立两个栈,一个存数据,另一个维护最小值。
要注意:
1.重复的最小值;
2.pop()等几个方法不用返回值
对我来说,建立两个栈的方法还是有点难度的。结合了答案的思路又修修补补才写出来
class MinStack:
def __init__(self):
"""
initialize your data structure here.
"""
self.A = []
self.minA =[]
def push(self, x: int) -> None:
self.A.append(x)
if not self.minA or self.minA[-1] >= x :
self.minA.append(x)
def pop(self) -> None:
if self.A.pop() == self.minA[-1]:
self.minA.pop()
def top(self) -> int:
return self.A[-1]
def min(self) -> int:
if self.minA :
return self.minA[-1] # 返回值但不出栈