单调栈应用题目
单调栈专题,可以按照这个列表来刷。
- [LeetCode-42] 接雨水
- [LeetCode-239] 滑动窗口最大值
- [LeetCode-496] 下一个更大元素 I
- [LeetCode-503] 下一个更大元素 II
- [LeetCode-739] 每日温度
- [LeetCode-901] 股票价格跨度
- [HDU-5749] Colmerauer
- [HDU-4252] A Famous City
- [HDU-1506] Largest Rectangle in a Histogram
- [HDU-6319] Ascending Rating
- 最大矩形面积
1. 接雨水
# 最小栈接雨水 nums = [0,1,0,2,1,0,1,3,2,1,2,1] def trap(height): if not height: return 0 stack = [] res = 0 for i in range(len(height)): if stack: # 单调减,入栈 if height[i] <= height[stack[-1]]: stack.append(i) else: # 如果当前柱子都要比栈顶元素大,可以存储雨水,while循环里计算满足接水条件 while height[i] > height[stack[-1]]: stack_top = stack.pop() # pop之后检测是否还有元素,且栈顶元素高度等于前面弹出的高度,继续 while stack and height[stack[-1]] == height[stack_top]: stack_top = stack.pop() if stack: res += (i - stack[-1] -1) * (min(height[i], height[stack[-1]]) - height[stack_top]) else: break # 不计算了 stack.append(i) else: if height[i] != 0: stack.append(i) # 入栈&等于零不入栈 return res trap(nums)
时刻记着自己要成为什么样的人!