题目列表
题目分析
栈: 先进后出。
队列: 先进先出。
python
可以用列表模拟栈或者队列。
- 栈
stack = []
stack.append(998) # 添加一个元素
stack.pop() # 弹出栈顶的元素,即最后添加元素 stack[-1]
- 队列
queue = []
queue.append(998) # 添加一个元素
queue.pop(0) # 弹出队列头的元素,即最先添加元素 queue[0]
题目代码
class Solution(object):
def trap(self, height):
"""
:type height: List[int]
:rtype: int
"""
ans = 0
stack = []
for h in range(len(height)):
while len(stack)!=0 and height[h] > height[stack[-1]]:
top = stack.pop()
if len(stack)==0:
break
dis = h - stack[-1] - 1
ans += (min(height[h], height[stack[-1]]) - height[top]) * dis
stack.append(h)
return ans
- 最大矩形
class Solution(object):
def largestRectangleArea(self, heights):
"""
:type heights: List[int]
:rtype: int
"""
stack = []
heights = [0] + heights + [0]
res = 0
for i in range(len(heights)):
while stack and heights[stack[-1]] > heights[i]:
tmp = stack.pop()
res = max(res, (i - stack[-1] - 1) * heights[tmp])
stack.append(i)
return res