• 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;
    	}
    
    }
    
  • 相关阅读:
    IOS归档操作
    IOS文件操作
    NSNumber,NSValue,NSData
    dbcp数据库连接池属性介绍
    Spring整合hibernate4:事务管理
    Spring整合hibernate4
    Spring AOP
    Chapter 27 Controlling Animations
    Chapter 23 Core Data
    Chapter 21 WebServices and UIWebView
  • 原文地址:https://www.cnblogs.com/masterlibin/p/5741920.html
Copyright © 2020-2023  润新知