华为一站式服务建站各行业关键词
leetcode Hot 100系列
文章目录
- 一、核心操作
- 二、外层配合操作
- 三、核心模式代码
- 总结
一、核心操作
- 单调栈,保持栈底到栈顶从高到低
- 一旦当前值大于栈顶,则记录中间柱子的下标,再弹出栈顶,
一旦栈不为空
此时就有了柱子和左右边的柱子 - 计算面积,取左右较小值减中间柱子的高度,取右-左-1作为宽度,累加
- 当前值入栈
提示:小白个人理解,如有错误敬请谅解!
二、外层配合操作
- 外层循环
- 内层循环只有栈不为空时再来计算
- 内层循环完了再将当前值入栈!!!!!
三、核心模式代码
代码如下:
class Solution {public:int trap(std::vector<int>& height) {int res=0;std::stack<int> st;int n=height.size();for(int i=0;i<n;i++){while (!st.empty() && height[i]>height[st.top()]){int mid=st.top();st.pop();if(!st.empty()){int h=std::min(height[i],height[st.top()])-height[mid];int w=i-st.top()-1;res+=h*w;}}st.push(i);}return res;}};
总结
- 所有值都要入栈!栈不为空时才累加