LeetCode刷题笔记(三)栈与队列
2021-08-07 本文已影响0人
YongtaoHuang
三. 栈与队列
python中的栈直接用list实现,队列用deque,需要导入外部包。
from collections import deque
155. 最小栈
题目:设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。
思考:这道题考的是如何如何最快速度获取到最小元素。
class MinStack:
def __init__(self):
self.l = list()
def push(self, val: int) -> None:
self.l.append(val)
def pop(self) -> None:
self.l.pop()
def top(self) -> int:
return self.l[-1]
def getMin(self) -> int:
return min(self.l) # 不用辅助栈也能通过
class MinStack:
def __init__(self):
self.stack = []
self.min_stack = [math.inf]
def push(self, x: int) -> None:
self.stack.append(x)
self.min_stack.append(min(x, self.min_stack[-1]))
def pop(self) -> None:
self.stack.pop()
self.min_stack.pop()
def top(self) -> int:
return self.stack[-1]
def getMin(self) -> int:
return self.min_stack[-1]
225. 用队列实现栈
题目:用队列实现栈
思考: 得用两个队列模拟栈
class MyStack:
def __init__(self):
self.queue1 = collections.deque()
self.queue2 = collections.deque()
def push(self, x: int) -> None:
self.queue2.append(x)
while self.queue1:
self.queue2.append(self.queue1.popleft())
self.queue1, self.queue2 = self.queue2, self.queue1
def pop(self) -> int:
return self.queue1.popleft()
def top(self) -> int:
return self.queue1[0]
def empty(self) -> bool:
return not self.queue1
232. 用栈实现队列
题目:用栈实现队列
思考: 得用两个栈模拟队列
class MyQueue:
def __init__(self):
self.a = []
self.b = []
def push(self, x: int) -> None:
while self.b:
self.a.append(self.b.pop())
self.a.append(x)
while self.a:
self.b.append(self.a.pop())
def pop(self) -> int:
return self.b.pop()
def peek(self) -> int:
return self.b[-1]
def empty(self) -> bool:
return len(self.b) == 0