leetcode刷题_OJ 42

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.


The above elevation map is represented by array [0,1,0,2,1,0,1,3,2,1,2,1]. In this case, 6 units of rain water (blue section) are being trapped. Thanks Marcos for contributing this image!

Example:

Input: [0,1,0,2,1,0,1,3,2,1,2,1]
Output: 6

当年大一软设机考的最后一道题,当时乍一看觉得很难,怎么计算这种不规则图形的储水量呢?可是只要先去做了leetcode11后就豁然开朗了。就是定义左右标记的事。

class Solution {
    public int trap(int[] height) {

        if(height.length == 0) return 0;

        int max=0;
        int left=height[0],right=height[height.length-1];

        int a=0,b=height.length-1;

        while(a<b){
            left=Math.max(left,height[a]);
            right=Math.max(right,height[b]);

            if(left<right){
                max+=(left-height[a]);
                a++;
            }
            else{
                max+=(right-height[b]);
                b--;
            }
        }
        return max;
    }
}

猜你喜欢

转载自blog.csdn.net/cyanchen666/article/details/82183706
今日推荐