42. 接雨水(LeetCode困难)(单调栈好题)
42. 接雨水
每当插入一个,就要把前面比它小的给删去,因为能存水,最后存有绿色的

class Solution {
public:
int trap(vector<int>& height) {
stack<int> stk;
int res = 0;
for(int i = 0; i < height.size(); ++i){
int last = 0;
while(stk.size() && height[stk.top()] <= height[i]){
res += (height[stk.top()] - last) * (i - stk.top() - 1);
last = height[stk.top()];
stk.pop();
}
if(stk.size()) res += (i - stk.top() - 1) * (height[i] - last);
stk.push(i);
}
return res;
}
};

浙公网安备 33010602011771号