• 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 }
  • 相关阅读:
    完全背包
    二分求值(二分适合求答案在两个数之间的题目)
    set<pair<int,int> >的用法
    01背包 (dp专题)
    矩阵快速幂
    BZOJ1977 [BeiJing2010组队]次小生成树 Tree
    BZOJ1854 [Scoi2010]游戏
    BZOJ1054 [HAOI2008]移动玩具
    NOIP系列复习及题目集合
    BZOJ2708 [Violet 1]木偶
  • 原文地址:https://www.cnblogs.com/ireneyanglan/p/4859984.html
Copyright © 2020-2023  润新知