zoukankan      html  css  js  c++  java
  • TrappingRainWater

    问题描述:

    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;
    	}
    
    }
    
  • 相关阅读:
    xhr1.0和xhr2.0的区别
    Java10-堆和栈
    Java09-函数
    Java08-函数
    java基础7-流程控制3
    Java基础-流程控制2
    Java基础—流程控制1
    breadcrumbs面包屑是啥?
    Font test 字体大小测试用JS代码实现
    数据库密码要BS64才能登录
  • 原文地址:https://www.cnblogs.com/masterlibin/p/5741920.html
Copyright © 2011-2022 走看看