42. 接雨水

Posted 易小顺

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了42. 接雨水相关的知识,希望对你有一定的参考价值。

算法记录

LeetCode 题目:

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



说明

一、题目

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

二、分析

  • 直接看题目有点儿看不懂的感觉,其实就是需要找出整个数组为高组成的矩形里面找凹形面积和。
  • 出现凹形必然是呈现一种先减后增的趋势,那我们就只需要维护单调栈,只要出现一个比当前头节点大的值,就可以认为出现凹形面积了,然后记录这个面积。
class Solution {
    public int trap(int[] height) {
        Stack<Integer> s = new Stack();
        int ans = 0;
        for(int i = 0; i < height.length; i++) {
            while(!s.empty() && height[i] > height[s.peek()]) {
                int val = height[s.pop()];
                if(!s.empty()) ans += (i - s.peek() - 1) * (Math.min(height[i], height[s.peek()]) - val);
            }
            s.push(i);
        }
        return ans;
    }
}

总结

熟悉单调栈的使用。

以上是关于42. 接雨水的主要内容,如果未能解决你的问题,请参考以下文章

leetcode 每日一题 42. 接雨水

每日一题:42. 接雨水

42. 接雨水

LeetCode42题动态规划 - 接雨水

11-1:(42)接雨水

LeetCode:接雨水42