• LeetCode 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!

    找到最长的那块木板,假设其下标为maxIdx。

    分别从左侧和右侧向其逼近。

    在左侧逼近过程中:

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

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

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

     1 public class Solution {
     2     public int trap(int[] A) {
     3         if (A.length<3) {
     4             return 0;
     5         }
     6         int len=A.length;
     7         int maxIndex=0;
     8         //找出最大值的下标
     9         for (int i = 0; i < len; i++) {
    10             if (A[i]>A[maxIndex]) {
    11                 maxIndex=i;
    12             }
    13         }
    14         
    15         int leftMax=0;
    16         int rightMax=0;
    17         int water=0;
    18         for (int i = 0; i < maxIndex; i++) {
    19             if (leftMax>A[i]) {
    20                 water=water+leftMax-A[i];
    21             }else {
    22                 leftMax=A[i];
    23             }
    24         }
    25             
    26         for (int i = len-1; i > maxIndex; i--) {
    27             if (rightMax>A[i]) {
    28                 water=water+rightMax-A[i];
    29             }else {
    30                 rightMax=A[i];
    31             }
    32         }
    33         return water;
    34     }
    35 }
  • 相关阅读:
    两数之和
    dict用法
    xgboost
    常见报错
    四、ABP 学习系列
    Apache Htpasswd生成和验证密码
    ABP 学习系列
    Gradle 配置
    ArcGis教程
    在线排程设置生成器Quartz
  • 原文地址:https://www.cnblogs.com/birdhack/p/4061002.html
Copyright © 2020-2023  润新知