LeetCode42----接雨水

2019-01-07  本文已影响8人  海盗的帽子

问题

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。

image.png

示例

输入: [0,1,0,2,1,0,1,3,2,1,2,1]

输出: 6

解法

雨水的量 = 蓝色的面积+黑色的面积 - 黑色的面积

image.png
class Solution {
    public int trap(int[] height) {
        if(height == null || height.length == 0){
            return 0;
        }
        
        int maxIndex = 0;
        for(int i= 0 ; i< height.length ;i++){
            if(height[maxIndex] < height[i]){
                maxIndex = i;
            }
        }
        int cur =0;
        int sum = 0;
        
        for(int i=0;i<maxIndex ;i++){
            if(height[i] > cur){
                cur = height[i];
            }
            sum += cur;
        }
        
        sum += height[maxIndex];
        
        cur = 0;
        for(int i = height.length -1;i > maxIndex ;i--){
            if(height[i] > cur){
                cur = height[i];
            }
            sum += cur;
        }
        
        for(int i=0;i< height.length ;i++){
            sum-=height[i];
        }
        return sum;
        
        
    }
}
上一篇 下一篇

猜你喜欢

热点阅读