接雨水
分析
对于每一个高度找到左边第一个比它小的,然后计算蓄水量。找到左边第一个比它小的这个操作使用单调栈处理
class Solution {
public:
int trap(vector<int>& height) {
stack<int>st;
int ans = 0;
for (int i(0); i < height.size(); i++) {
int last = 0;
while (st.size() && height[i] > height[st.top()]) {
ans += (height[st.top()] - last) * (i - st.top() - 1);
last = height[st.top()];
st.pop();
}
if (st.size()) {
ans += (height[i] - last)* (i - st.top() - 1);
}
st.push(i);
}
return ans;
}
};