[leetcode] 42. 接雨水

42. 接雨水

思路:一块柱子能接水的量取决于它左右两边最高的柱子中较短的一个。

class Solution {
    public int trap(int[] height) {
        int left[] = new int[height.length];
        int right[] = new int[height.length];
        int max = 0;
        for (int i = 0; i < height.length; i++) {
            max = Math.max(max, height[i]);
            left[i] = max;
        }
        max = 0;
        for (int i = height.length - 1; i >= 0; i--) {
            max = Math.max(max, height[i]);
            right[i] = max;
        }

        int ans = 0;
        for (int k = 1; k < height.length - 1; k++) {
            if (left[k - 1] <= 0 || right[k + 1] <= 0) continue;
            int tmp = Math.min(left[k - 1], right[k + 1]) - height[k];
            if (tmp > 0) ans += tmp;
        }

        return ans;
    }
}

原文地址:https://www.cnblogs.com/acbingo/p/9339010.html

时间: 2024-10-16 10:58:24

[leetcode] 42. 接雨水的相关文章

LeetCode:接雨水【42】

LeetCode:接雨水[42] 题目描述 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水. 上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水). 感谢 Marcos 贡献此图. 示例: 输入: [0,1,0,2,1,0,1,3,2,1,2,1] 输出: 6 题目分析 找出最高点 分别从两边往最高点遍历:如果下一个数比当前数小,说明可以接到水 Java题解 c

11-1:(42)接雨水

42. 接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水. 上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水). 感谢 Marcos 贡献此图. 示例: 输入: [0,1,0,2,1,0,1,3,2,1,2,1] 输出: 6 An understandable python solution: class Solution(object): def tr

[ Leetcode ] No.42 接雨水

题目: 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水. 示例: 输入: [0,1,0,2,1,0,1,3,2,1,2,1] 输出: 6 解题思路: 首先构建两个栈,h存高度,idx存下标. 遍历数组,将height[i]与h.top()做比较 若height[i] <= h.top(),则将对应的高度和下标都入栈. 若height[i] > h.top(),则表明可能可以求得面积. 实际上,对于index = k的方块而言,可能接住的雨水等于

leetCode 42.Trapping Rain Water(凹槽的雨水) 解题思路和方法

Trapping Rain Water Given n non-negative integers representing an elevation map where the width of each bar is 1, compute how much water it is able to trap after raining. For example, Given [0,1,0,2,1,0,1,3,2,1,2,1], return 6. The above elevation map

Leetcode 407.接雨水

接雨水 给定一个 m x n 的矩阵,其中的值均为正整数,代表二维高度图每个单元的高度,请计算图中形状最多能接多少体积的雨水. 说明: m 和 n 都是小于110的整数.每一个单位的高度都大于0 且小于 20000. 示例: 给出如下 3x6 的高度图: [ [1,4,3,1,3,2], [3,2,1,3,2,4], [2,3,3,2,3,1] ] 返回 4. 如上图所示,这是下雨前的高度图[[1,4,3,1,3,2],[3,2,1,3,2,4],[2,3,3,2,3,1]] 的状态. 下雨后,

42. 接雨水

https://leetcode-cn.com/problems/trapping-rain-water/ 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水. 上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水). 感谢 Marcos 贡献此图. 示例: 输入: [0,1,0,2,1,0,1,3,2,1,2,1]输出: 6 来源:力扣(LeetCode)链接:ht

LeetCode 42 Trapping Rain Water(积水体积)

题目链接: https://leetcode.com/problems/trapping-rain-water/?tab=Description Problem: 根据所给数组的值,按照上图的示意图.求解积水最大体积. 首先对所给数组进行遍历操作,求出最大高度所对应的下标为maxIndex 之后从左向右进行遍历,设置左边高度为leftMax 并初始化为 height[0],从i==1到i==maxIndex进行遍历.不断更新water,以及leftMax 当height[I]小于leftMax时

42.接雨水 Trapping Rain Water

本人的解法: public class Main { public int trap(int[] height) { // 统计雨水总数//temp登记最大值 int sum = 0; if (height.length != 0) { int temp = height[0]; int temp2 = 0; int temp3 = height[0]; int temp4 = height[height.length - 1]; //跟踪最大值的位置 for (int x = 0; x < h

【leet-code】接雨水

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水. 上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水). 感谢 Marcos 贡献此图. 示例: 输入: [0,1,0,2,1,0,1,3,2,1,2,1] 输出: 6 分析: 解法1:暴力法 对每个元素取其左右两边的最大值的最小值,然后减去当前值 时间复杂度:O(N^2),对每个元素都需要取其左右两边的最大值 空