zoukankan      html  css  js  c++  java
  • 【leetcode】Trapping Rain Water

    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!

     

    找到最长的木板所在的位置,分别从左侧和右侧向其逼近。

    在左侧逼近过程中:

    如果一个木板的长度小于已经遍历的最大长度max,即max>该木板<maxIdx,所以在该木板位置能存max - 该木板长度的水量(左右两侧各有一个木板长于它)。

    如果一个木板的长度大于已经遍历的最大长度max,即max<该木板<maxIdx,所以在该木板位置不能存水(因为左右两侧只有一个木板(maxIdx)长于它)。更新max值。

    右侧逼近过程与左侧相似。

     1 class Solution {
     2 public:
     3     int trap(int A[], int n) {
     4          
     5         if(n==0) return 0;
     6          
     7         int i;
     8         int maxIndex=0;
     9         int Amax=A[0];
    10         
    11         for(i=1;i<n;i++)
    12         {
    13             if(Amax<A[i]) 
    14             {
    15                 Amax=A[i];
    16                 maxIndex=i;
    17             }
    18         }
    19          
    20         int curMax=A[0];
    21         int totalWater=0;
    22          
    23         for(i=1;i<maxIndex;i++)
    24         {
    25             if(A[i]<curMax) totalWater+=curMax-A[i]; 
    26             else curMax=A[i];
    27         }
    28          
    29         curMax=A[n-1];
    30         for(i=n-2;i>maxIndex;i--)
    31         {
    32             if(A[i]<curMax) totalWater+=curMax-A[i];
    33             else curMax=A[i];
    34         }
    35          
    36         return totalWater;
    37     }
    38 };
     
     
  • 相关阅读:
    笨办法29IF语句
    笨办法28布尔表达式
    笨办法27记住逻辑
    笨办法26恭喜你,可以进行一次考试了
    笨办法25更多更多的练习
    笨办法23复制文件
    成功转移(✿◡‿◡)
    笨办法22到目前为止你学到了什么?
    vue.js
    webpack-优化
  • 原文地址:https://www.cnblogs.com/reachteam/p/4177013.html
Copyright © 2011-2022 走看看