美文网首页程序员
力扣 42 接雨水

力扣 42 接雨水

作者: zhaojinhui | 来源:发表于2020-07-28 11:38 被阅读0次

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

思路:设置首尾指针,比较首尾指针,从数字较小的一边开始移动,直到找到大于当前较小数字的数,移动过程中累积积水量,重新比较首尾指针的数,循环以上过程(具体可见代码)

思想:利用数组index来解决问题

复杂度:时间O(n),空间O(1)

class Solution {
    public int trap(int[] height) {
        int res = 0;
        int l = 0;
        int r= height.length - 1;
        while(l<r) {
            // 右边的数小
            if(height[l] >= height[r]) {
                int temp = r;
                // 不停的向左遍历数组,直到找到比当前尾指针数大的数
                while(temp>l && height[temp] <= height[r]) {
                    // 尾指针-当前小的数即为,当前index可积水量
                    res += height[r] - height[temp];
                    temp--;
                }
               // 更新尾指针
                r = temp;
            } else {
               // 首支针类似
                int temp = l;
                while(temp<r && height[temp]<= height[l]) {
                    res += height[l] - height[temp];
                    temp++;
                }
                l = temp;
            }
        }
       // 返回结果
        return res;
    }
}

相关文章

  • 力扣 42 接雨水

    题意:给定 n 个非负整数表示每个宽度为 1 的柱子,计算按此排列的柱子,后能接多少雨水。 思路:设置首尾指针,比...

  • LeetCode 力扣 42. 接雨水

    题目描述(困难难度) 黑色的看成墙,蓝色的看成水,宽度一样,给定一个数组,每个数代表从左到右墙的高度,求出能装多少...

  • 如何高效解决接雨水问题

    读完本文,你可以去力扣拿下如下题目: 42.接雨水[https://leetcode-cn.com/problem...

  • 42 接雨水

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

  • 42 接雨水

    解法

  • 42. 接雨水

  • 42. 接雨水

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

  • 42. 接雨水

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

  • 42. 接雨水

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

  • 42.接雨水

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

网友评论

    本文标题:力扣 42 接雨水

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