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

TrappingRainWater

时间:2016-08-05 17:29:00      阅读:234      评论:0      收藏:0      [点我收藏+]

标签:

问题描述:

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.

技术分享

算法分析:观察下就可以发现被水填满后的形状是先升后降的塔形,因此,先遍历一遍找到塔顶,然后分别从两边开始,往塔顶所在位置遍历,水位只会增高不会减小,且一直和最近遇到的最大高度持平,这样知道了实时水位,就可以边遍历边计算面积。

 

public class TrapingRainWater 
{
	public int trap(int[] height)
	{
		int n = height.length;
		if(n <= 2)
		{ 
			return 0;
		}
		int max = -1;
		int maxIndex = 0;
		for(int i = 0; i < n; i ++)
		{
			if(height[i] > max)
			{
				max = height[i];
				maxIndex = i;
			}
		}
		int area = 0;
		int root = height[0];
		for(int i = 0; i < maxIndex; i ++)
		{
			if(root < height[i])
			{
				root = height[i];
			}
			else
			{
				area += (root - height[i]);
			}
		}
		root = height[n-1];
		for(int i = n-1; i > maxIndex; i --)
		{
			if(root < height[i])
			{
				root = height[i];
			}
			else
			{
				area += (root - height[i]);
			}
		}
		return area;
	}

}

 

TrappingRainWater

标签:

原文地址:http://www.cnblogs.com/masterlibin/p/5741920.html

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