算法 - leetcode 42. 接雨水

2021-02-07 02:17

阅读:393

标签:高度   src   aliyun   部分   赋值   turn   宽度   img   示例   

leetcode 42. 接雨水

一、前言

  今天刷了一道个人觉得好难的leetcode题目(大神可以忽略)

 

二丶题目

42. 接雨水

技术图片

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

技术图片

上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 感谢 Marcos 贡献此图。

示例:

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

 

三、个人解法

class Solution {
    public int trap(int[] height) {
        if(height==null || height.length){
            return 0;
        }

        int total=0;
        int left=0;

        //左低右高
        for(int i=0;i){
            if(height[left]//计算赋值
                //判断是否符合"凹"型(可以装水)
                if(left+2height[left+1] && height[i]>height[i-1]){
                    int tmpTotal=0;
                    for(int j=left+1;j){
                        tmpTotal+=height[j];
                    }
                    //积水量=补平最高位后的总量  - 台阶占用空间
                    total=total+(height[left]*(i-left-1) - tmpTotal);
                }

                left=i;
            }
        }


        //左高右低
        int right=height.length-1;
        for(int i=right;i>=left;i--){
            if(height[right]//计算赋值
                if(i+2height[i+1] && height[right]>height[right-1]){
                    int tmpTotal=0;
                    for(int j=i+1;j){
                        tmpTotal+=height[j];
                    }

                    total=total+(height[right]*(right-i-1) - tmpTotal);
                }

                right=i;
            }


        }



        return total;
    }
}

 

 

技术图片

 

 

 

 

算法 - leetcode 42. 接雨水

标签:高度   src   aliyun   部分   赋值   turn   宽度   img   示例   

原文地址:https://www.cnblogs.com/timfruit/p/12778890.html


评论


亲,登录后才可以留言!