代随(138):单调栈:一维接雨水
题干:
代码:
class Solution {
public:
int trap(vector<int>& height) {
//if(height.size() <= 2) return 0;
stack<int>st;
st.push(0);
int sum = 0;
for(int i = 1; i < height.size(); i++)
{
if(height[i] < height[st.top()])
{
st.push(i);
}
else if(height[i] == height[st.top()])
{
st.pop();
st.push(i);
}
else{
while(!st.empty() && height[i] > height[st.top()])
{
int mid = st.top();
st.pop();
if(!st.empty()){
int h = min(height[i], height[st.top()]) - height[mid];
int w = i - st.top() - 1;
sum += h * w;
}
}
}
st.push(i);
}
return sum;
}
};
要点:三个判断中遇到高于栈顶的就开始大段代码while非空+if非空了