zoukankan      html  css  js  c++  java
  • 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 };
  • 相关阅读:
    学习笔记
    核心网概要学习
    python基础知识
    python_基础知识_py运算符
    python_基础知识
    将博客搬至CSDN
    poj1182测试数据过了,但A不了,暂时放在这,以后再看
    score——3354
    杭电1241
    杭电1010(WA)
  • 原文地址:https://www.cnblogs.com/amazingzoe/p/4783934.html
Copyright © 2011-2022 走看看