zoukankan      html  css  js  c++  java
  • Trapping Raining Water 解答

    Question

    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.

    Solution

    referrence

    Key to the solution is to know that for each point a[i], the max are is calculated by:

    min(left,right) – a[i]

    left is the maximum height before a[i], right is the maximum height after a[i].

    Therefore, we can create two arrays to record left most height and right most height for each point. Time complexity O(n).

     1 public class Solution {
     2     public int trap(int[] height) {
     3         if (height == null || height.length < 1)
     4             return 0;
     5         int length = height.length;
     6         int[] leftMost = new int[length];
     7         int[] rightMost = new int[length];
     8         // First, find left biggest hight
     9         leftMost[0] = 0;
    10         for (int i = 1; i < length; i++)
    11             leftMost[i] = Math.max(leftMost[i - 1], height[i - 1]);
    12         
    13         // Then, find right biggest hight
    14         rightMost[length - 1] = 0;
    15         for (int i = length - 2; i >= 0; i--)
    16             rightMost[i] = Math.max(rightMost[i + 1], height[i + 1]);
    17         
    18         // Calculate sum
    19         int result = 0;
    20         for (int i = 0; i < length; i++) {
    21             int tmp = Math.min(leftMost[i], rightMost[i]) - height[i];
    22             if (tmp > 0)
    23                 result += tmp;
    24         }
    25         return result;
    26     }
    27 }
  • 相关阅读:
    HDU 5213 分块 容斥
    HDU 2298 三分
    HDU 5144 三分
    HDU 5145 分块 莫队
    HDU 3938 并查集
    HDU 3926 并查集 图同构简单判断 STL
    POJ 2431 优先队列
    HDU 1811 拓扑排序 并查集
    HDU 2685 GCD推导
    HDU 4496 并查集 逆向思维
  • 原文地址:https://www.cnblogs.com/ireneyanglan/p/4859984.html
Copyright © 2011-2022 走看看