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.

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

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
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;
    }
 
}

 

posted @   32ddd  阅读(408)  评论(0编辑  收藏  举报
编辑推荐:
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· ASP.NET Core 模型验证消息的本地化新姿势
阅读排行:
· ThreeJs-16智慧城市项目(重磅以及未来发展ai)
· .NET 原生驾驭 AI 新基建实战系列(一):向量数据库的应用与畅想
· Ai满嘴顺口溜,想考研?浪费我几个小时
· Browser-use 详细介绍&使用文档
· 软件产品开发中常见的10个问题及处理方法
点击右上角即可分享
微信分享提示