Java算法每日一题day2:接雨水问题

1.问题描述

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


高度图

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

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

2.方法

直观想法

直接按问题描述进行。对于数组中的每个元素,我们找出下雨后水能达到的最高位置,等于两边最大高度的较小值减去当前高度的值

3.执行代码

class Solution {
    public int trap(int[] height) {
        int ans=0;
        for(int i=1;i<height.length-1;i++){
            int left_max=0,right_max=0;
            for(int j=i;j>=0;j--){
                left_max=max(left_max,height[j]);//向左遍历找最大值
            }
            for(int j=i;j<=height.length-1;j++){
                right_max=max(right_max,height[j]);//向右遍历找最大值
            }
            ans+=min(left_max,right_max)-height[i];//遍历到当前元素所接雨水总数
        }
        return ans;
    }
    private int max(int a, int b ) {
        if(a>b) return a;
        else return b;
    }

    private int min(int a, int b) {
        if(a<b) return a;
        else return b;
    }
}

4.复杂度分析

时间复杂度: O(n2)。数组中的每个元素都需要向左向右扫描。
空间复杂度 O(1)的额外空间。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一些概念 数据结构就是研究数据的逻辑结构和物理结构以及它们之间相互关系,并对这种结构定义相应的运算,而且确保经过这...
    Winterfell_Z阅读 5,925评论 0 13
  • 专业考题类型管理运行工作负责人一般作业考题内容选项A选项B选项C选项D选项E选项F正确答案 变电单选GYSZ本规程...
    小白兔去钓鱼阅读 9,051评论 0 13
  • 上个blog是使用GitHub的pages服务搭建的,逼格虽然高,但是发布文章修改之类的还是挺麻烦的。 我只想好好...
    _赖笔小新阅读 406评论 0 1
  • 纵然这个世界待我不好 我依然歌唱这个世界 纵然人们看不起我 我依然对他们热情 纵然人们辱我 我依然乐观向上 纵然我...
    西北荒漠阅读 164评论 0 0
  • 今天,我接到了妈妈的电话,我以为只是一通普通的电话。接到后,我听出了妈妈的哽咽,问我学校能不能请假,我知道出事...
    zoeymax阅读 107评论 0 0