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 }
  • 相关阅读:
    视图组件之开关按钮
    单选框与复选框的实现
    String、StringBuffer 、StringBuilder 的区别(转)
    布局管理器之相对布局(二)
    布局管理器之相对布局(一)
    帧布局 FrameLayout
    表格布局TableLayout
    布局管理器中的线性布局
    36选7
    冒泡
  • 原文地址:https://www.cnblogs.com/ireneyanglan/p/4859984.html
Copyright © 2011-2022 走看看