• 【力扣 067】42. 接雨水


    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 个单位的雨水(蓝色部分表示雨水)。 
    示例 2:

    输入:height = [4,2,0,3,2,5]
    输出:9
     

    提示:

    n == height.length
    1 <= n <= 2 * 104
    0 <= height[i] <= 105

    来源:力扣(LeetCode)
    链接:https://leetcode.cn/problems/trapping-rain-water
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    代码实现:

    class Solution
    {
    public:
    	int trap(vector<int> &height)
    	{
    		stack<int> s; // 单调递减栈
    		int result = 0;
    		for (int i = 0; i < height.size(); i++)
    		{
    			while (!s.empty() && height[s.top()] < height[i])
    			{
    				// 遇到增值,开始弹出
    				int midH = height[s.top()]; // 被弹出的点的自身高度
    				s.pop();
    				if (!s.empty())
    				{
    					// h = 左侧第一个更高的点 & 右侧第一个更高的点的最小值
    					int h = min(height[s.top()], height[i]);
    					// 新增面积 = (h-自身高度) * 左右两个最近高点的距离
    					result += (i - s.top() - 1) * (h - midH);
    				}
    			}
    			s.push(i);
    		}
    		return result;
    	}
    };
  • 相关阅读:
    robotframework笔记9
    robotframework笔记8
    Spring预处理
    WebStrom快捷键
    json死循环问题
    java线程与缓存
    oss文件删除策略
    Eclipse自动编译问题
    将 JAR 转为 EXE – EXE4J 的使用教程(第一期)(转载)
    将 JAR 转为 EXE – JSMOOTH 的使用教程(第二期)(转载)
  • 原文地址:https://www.cnblogs.com/sunbines/p/16300386.html
Copyright © 2020-2023  润新知