码迷,mamicode.com
首页 > 移动开发 > 详细

Trapping Raining Water 解答

时间:2015-10-08 07:59:25      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:

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 }

 

Trapping Raining Water 解答

标签:

原文地址:http://www.cnblogs.com/ireneyanglan/p/4859984.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!