leecode.42. 接雨水

题目

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。

示例 1:

输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]
输出:6
解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。

leecode.42. 接雨水_第1张图片

思路分析

代码

class Solution {
public:
    int trap(vector& height) {
        stack s;
        int n = height.size(), ans = 0;
        for(int i = 0;i < n;i++){
            while(!s.empty() && height[i] > height[s.top()]){
                int h = height[s.top()];
                s.pop();
                if(s.empty()) break;
                int h1 = min(height[s.top()], height[i]) - h;
                ans += h1 * (i - s.top() - 1);
            }
            s.push(i);
        }
        return ans;
    }
};

你可能感兴趣的:(leecode-单调栈)