美文网首页IT 森林
Java算法每日一题day2:接雨水问题

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

作者: 不辍居 | 来源:发表于2019-06-20 12:19 被阅读0次

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)的额外空间。

相关文章

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

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

  • Java算法(3):接雨水

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

  • 算法:接雨水

    问题 Given n non-negative integers representing an elevatio...

  • HashMap,LinkedHashMap, SparseArr

    参考自 工匠若水 码农每日一题 《Java HashMap 基础面试常见问题》(阅1)《Java HashMap ...

  • 接雨水问题

    问题1 盛水最多的容器 原理 首先想到最多的容器肯定是:Min(两个柱子)*(柱子之间间距) 遍历一次需要找到最多...

  • 接雨水问题

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

  • 接雨水问题

    问题描述 给定一个整形数组arr,已知其中所有的值都是非负的,将这个数组看作一个柱子高度图,计算按此排列的柱子,下...

  • Java每日一题20161213

    20161212问题解析请点击今日问题下方的“【Java每日一题】20161213”查看(问题解析在公众号首发,公...

  • Java每日一题20161214

    20161213问题解析请点击今日问题下方的“【Java每日一题】20161214”查看(问题解析在公众号首发,公...

  • Java每日一题20161215

    20161214问题解析请点击今日问题下方的“【Java每日一题】20161215”查看(问题解析在公众号首发,公...

网友评论

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

    本文链接:https://www.haomeiwen.com/subject/ftdrqctx.html