单调栈整理
单调栈 最近做题,遇到不少单调栈的问题,整理一下; 参考博客 coordinate_blog ; 单调栈需要处理问题的情形是回答,比当前元素更大/更小的下一个或者前一个数; leetcode. 42 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水? 注意这个单调栈的写法,之前自己写得是不是太复杂,为什么最后stack非空的情况不需要考虑?是因为这时候中间的部分都已经算过了 class Solution: def trap(self, height: List[int]) -> int: stack = [] res = 0 for i in range(len(height)): while stack and height[stack[-1]]<height[i]: tmp = stack.pop() if not stack: break res += (min(height[stack[-1]],height[i])-height[tmp])*(i-stack[-1]-1) stack.append(i) return res 其实自己差不多已经写出来了,但是中间的多了很多不必要的考虑。还是在动手写写之前没有考虑清楚就下手,最为致命; 还是你的解题思路不对,没有想清楚就下手,必须逼迫自己按照合理的解题思路写题; class