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;
    }
};
posted @ 2025-03-13 15:38  awei040519  阅读(14)  评论(0)    收藏  举报