zoukankan      html  css  js  c++  java
  • 42. Trapping Rain Water

    Given n non-negative integers representing an elevation map where the width of each bar is 1, compute how much water it is able to trap after raining. 

    For example, Given [0,1,0,2,1,0,1,3,2,1,2,1], return 6.

    The above elevation map is represented by array [0,1,0,2,1,0,1,3,2,1,2,1]. In this case, 6 units of rain water (blue section) are being trapped. Thanks Marcos for contributing this image!

     

    解决办法:

    从左边i开始,依次匹配知道找到高于height[i]的节点,左边的水容量每个点(height[i] - height[j])的值相加,然后从当前最大的点开始依次匹配。

    但是这样可能出现起点为最大值,所以调整为采用l和r两个指针,维护装水两边的位置。当l处高度低时,说明l右侧装的水肯定和l处一样高,此时逐步右移l,同是加上l处与右移后位置高度差(因为这里都能装水啊),直到再遇到同样高或者更高的位置。然后进行下一轮判断。同样,当r处高度低时,说明r左侧的水肯定和r处一样高,此时逐步左移r,同是加上r处与左移后位置高度差,直到再遇到同样高或者更高的位置。最后直到l和r相遇,结束。

     

    class Solution {
    public:
        int trap(vector<int>& height) {
            int left = 0;
            int right = height.size() - 1;
            int sum = 0;
           
            while( left < right )
            {
                int minh = min( height[left] , height[right]);
                
                if( minh == height[left])
                
                    while(++left<right && height[left] < minh)
                        sum = sum -height[left] + minh; 
                else
                    while(left < --right && height[right] <minh)
                        sum = sum - height[right] + minh; 
            
            }
            return sum;
            
        }
    };
  • 相关阅读:
    前后端分离下的自动化部署
    bouncy castle的配置
    列出本机JCE提供者,支持消息摘要算法,支持公钥私钥算法
    javaScript动态参数
    PKCS10生成证书csr
    未来编程语言---猜测
    html编辑网站
    java反编译工具JD-GUI
    java.lang.OutOfMemoryError: PermGen space
    修改idea的运行内存
  • 原文地址:https://www.cnblogs.com/fengyehe/p/5378602.html
Copyright © 2011-2022 走看看