单调栈问题总结
单调栈主要回答这样的几种问题
- 比当前元素更大的下一个元素
- 比当前元素更大的前一个元素
- 比当前元素更小的下一个元素
- 比当前元素更小的前一个元素
问题解决模板:
stack<int> st; for(int i = 0; i < nums.size(); i++) { while(!st.empty() && st.top() > nums[i]){ st.pop(); } st.push(nums[i]); }
可参考的题目:
序号 题目 题解
1 42. 接雨水(困难) 暴力解法、优化、双指针、单调栈
2 739. 每日温度(中等) 暴力解法 + 单调栈
3 496. 下一个更大元素 I(简单) 暴力解法、单调栈
4 316. 去除重复字母(困难) 栈 + 哨兵技巧
5 901. 股票价格跨度(中等) 「力扣」第 901 题:股票价格跨度(单调栈)
6 402. 移掉K位数字
7 581. 最短无序连续子数组
8 239 滑动窗口的最大值
9 84 柱状图中最大的矩形