美文网首页
leetcode 42. 接雨水(Java版)

leetcode 42. 接雨水(Java版)

作者: M_lear | 来源:发表于2019-07-11 09:58 被阅读0次

题目描述(题目难度,困难)

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


rainwatertrap.png

上面是由数组 [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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/trapping-rain-water
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题目求解

积满雨水后的图形,从左右两侧出发到最高的柱子,都是一阶阶上升的阶梯,就像爬楼梯一样。
以示例数组为例感受一下:
下雨前的数组:[0,1,0,2,1,0,1,3,2,1,2,1]
下雨后,积满雨水的数组:[0,1,1,2,2,2,2,3,2,2,2,1]
两数组之差即为所积雨水的量。
参考代码如下:

class Solution {
    public int trap(int[] height) {
        if(height == null || height.length <= 2) return 0;
        // 找到数组中第一个最大值的下标
        int imax = 0;
        for(int i = 1; i < height.length; ++i){
            if(height[i] > height[imax]) imax = i;
        }
        int rain = 0;
        int v = height[0];
        // 从左边上楼梯
        for(int i = 1; i < imax; ++i){
            if(height[i] < v) rain += v-height[i];
            else v = height[i];
        }
        v = height[height.length-1];
        // 从右边上楼梯
        for(int i = height.length-2; i > imax; --i){
            if(height[i] < v) rain += v-height[i];
            else v = height[i];
        }
        return rain;
    }
}

相关文章

  • leetcode 42. 接雨水(Java版)

    题目描述(题目难度,困难) 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能...

  • 42. 接雨水

    42. 接雨水[https://leetcode.cn/problems/trapping-rain-water/...

  • 题库笔记

    42. 接雨水[https://leetcode-cn.com/problems/trapping-rain-wa...

  • LeetCode:42. 接雨水(困难)

    问题链接 42. 接雨水(困难)[https://leetcode-cn.com/problems/trappin...

  • 2.双指针(二)

    https://leetcode-cn.com/tag/two-pointers/题目汇总42. 接雨水困难(??...

  • 42. 接雨水

    42. 接雨水(难度:困难) 题目链接:https://leetcode-cn.com/problems/trap...

  • [LeetCode]42. 接雨水

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

  • LeetCode - 42. 接雨水

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

  • LeetCode 42. 接雨水

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

  • 1.栈(一)

    题目汇总:https://leetcode-cn.com/tag/stack/20. 有效的括号简单42. 接雨水...

网友评论

      本文标题:leetcode 42. 接雨水(Java版)

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