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

    Analyse: The water can be trapped equals to the min(left[i], right[i]) - height[i], whereas left[i] and right[i] is the largest number of the left and right part of the number. 

    Runtime: 8ms.

     1 class Solution {
     2 public:
     3     int trap(vector<int>& height) {
     4         int n = height.size();
     5         if(n <= 1) return 0;
     6         
     7         int *left = new int [n];
     8         int max = height[0];
     9         for(int i = 1; i < n - 1; i++){//find the largest of the left of a element
    10             left[i] = max;
    11             if(height[i] > max) 
    12                 max = height[i];
    13         }
    14         max = height[n - 1];
    15         int result = 0;
    16         for(int j = n - 2; j >= 0; j--){
    17             int diff = min(max, left[j]) - height[j]; //the water trapped at index i
    18             if(diff > 0) 
    19                 result += diff;
    20             if(height[j] > max) 
    21                 max = height[j];
    22         }
    23         return result;
    24     }
    25 };
  • 相关阅读:
    腾讯云 Centos 配置 JDK & Tomcat & Mysql
    JNI编程新手入门:Java和C++的超简单交互
    关于正则表达式的一些实际应用
    CAJ 转化为PDF
    Latex 大括号后多行输出
    Latex 安装
    Neo4j使用操作
    pip 升级操作
    venue recommendation —— 应用场景/用户分类
    Recbole安装及使用
  • 原文地址:https://www.cnblogs.com/amazingzoe/p/4783934.html
Copyright © 2020-2023  润新知