42. 接雨水【leetcode】

原题地址:https://leetcode-cn.com/problems/trapping-rain-water/

利用栈,栈保存位置。

class Solution {
public:
    int trap(vector& height) {
        int ret = 0, i = 0;
        stack st;
        while(i < height.size())
        {
            while (!st.empty() && height[st.top()] < height[i])
            {
                int top = st.top();
                st.pop();
                if (st.empty())
                {
                    break;
                }
                int hc = min(height[i], height[st.top()]) - height[top]; //高度差
                int mc = i - st.top() - 1;
                ret += hc * mc;
            }
            st.push(i++);
        }
        return ret;
    }
};

假设有一个简单的height数组21012,当遍历到第二个1时,内部的while循环算出的是"/"的面积,也就是1 * 1 = 1 ,到遍历到第二个2时,内部的while循环算出的是"\"的面积。

42. 接雨水【leetcode】_第1张图片

你可能感兴趣的:(42. 接雨水【leetcode】)