美文网首页
42 接雨水

42 接雨水

作者: justonemoretry | 来源:发表于2021-08-11 08:44 被阅读0次
image.png

解法

class Solution {
    public static int trap(int[] height) {
        int sum = 0;
        // 用来做单调栈,想要接雨水,就要出现两边高,中间低的情况,
        // 所以这个当做一个单调递减栈,遇到大于等于栈顶的,就进行出栈,计算雨水容量
        Stack<Integer> stack = new Stack<>();
        stack.push(0);
        for (int i = 1; i < height.length; i++) {
            // 栈顶大于当前元素,当前元素入栈
            if (height[stack.peek()] > height[i]) {
                stack.push(i);
            }
            // 栈顶等于当前元素,栈顶出栈,当前元素入栈,因为后面取水时遇到相同高度的柱子,
            // 以右边的为主
            if (height[stack.peek()] == height[i]) {
                // 这里不pop的话,如果相同的柱子作为凹槽,那么会出现左边柱子和最小值相同,
                // 先会计算面积为0,后面找到大于最小值的再计算
                stack.pop();
                stack.push(i);
            }
            if (height[stack.peek()] < height[i]) {
                while (!stack.isEmpty() && height[stack.peek()] < height[i]) {
                    int m = stack.pop();
                    if (!stack.isEmpty()) {
                        int minHeight = Math.min(height[i], height[stack.peek()]);
                        sum += (i - stack.peek() - 1) * (minHeight - height[m]);
                    }
                }
                stack.push(i);
            }
        }
        return sum;
    }
}

相关文章

  • 42 接雨水

    自己解法 这个题之前看过解法,又想到用栈,不过忘了为啥要用。从暴力解法来看,就是当前点左右两边最高值中的较小值(包...

  • 42 接雨水

    解法

  • 42. 接雨水

  • 42. 接雨水

    ···class Solution {public int trap(int[] height) {int sum...

  • 42. 接雨水

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

  • 42. 接雨水

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

  • 42.接雨水

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

  • 42. 接雨水

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

  • 42. 接雨水

    题目描述 给定n个非负整数表示宽度为1的柱子高度,按此排序下雨后能接多少水。 示例: 解题思路 每个柱子可接的水量...

  • 栈-接雨水(42)

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

网友评论

      本文标题:42 接雨水

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