day 48 | 单调栈

接雨水和*********两道题

接雨水

  • 维持一个单调递减的list,如果有一个高出的元素且当前 list 有至少两个元素,那么我们就可以找到一部分是可以装水的。装完之后则可以pop 出去维持单调性
if len(stack)>=2:
  h = min(stack[-2][1],height[i])-stack[-1][1]
  w=i-stack[-2][0]-1
  count+=w*h

柱状图最大矩形

  • 题目可以翻译为在一维数组中对每一个数找到一个比自己小的元素,这样构成的矩形面积可以看做这个数构成的最大矩形
while stack and heights[i]<stack[-1][1]:
  if len(stack)>=2:
	h = stack[-1][1]
	w = i-stack[-2][0]-1
	res = max(res,h*w)
  stack.pop()
stack.append((i,heights[i]))

全部评论

相关推荐

点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务