美文网首页
算法:接水滴

算法:接水滴

作者: 小天使999999 | 来源:发表于2023-10-03 17:36 被阅读0次

题目

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

示例 1:
示例

输入:height = [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 个单位的雨水(蓝色部分表示雨水)。

示例 2:

输入:height = [4,2,0,3,2,5]
输出:9

提示:

n == height.length
1 <= n <= 2 * 104
0 <= height[i] <= 105

Java代码实现

class Solution {
    public int trap(int[] height) {

        int left = 0;
        int right = height.length - 1;
        int leftMax = 0;
        int rightMax = 0;
        int total = 0;

        while (left <= right) {
            if (height[left] <= height[right]) {
                if (height[left] > leftMax) {
                    leftMax = height[left];
                } else {
                    total += leftMax - height[left];
                }
                left++;
            } else {
                if (height[right] > rightMax) {
                    rightMax = height[right];
                } else {
                    total += rightMax - height[right];
                }
                right--;
            }
        }

        return total;
    }
}

算法解释

这段代码是使用双指针的方法来解决接雨水问题。

  1. 首先,定义两个指针left和right,分别指向数组的第一个元素和最后一个元素。

  2. 然后,定义两个变量leftMax和rightMax,分别用来保存左边和右边的最大高度。

  3. 接着,定义一个变量total用来保存接雨水的总量。

  4. 在循环中,当left <= right时,进行以下操作:
    i. 如果height[left] <= height[right],说明左边的高度较小,那么可以确定左边能接到的雨水量,即leftMax - height[left],将这个结果累加到total中。
    然后更新leftMax的值,如果height[left]大于leftMax,将leftMax更新为height[left]。
    最后,将left指针向右移动一位。
    ii. 如果height[left] > height[right],说明右边的高度较小,那么可以确定右边能接到的雨水量,即rightMax - height[right],将这个结果累加到total中。
    然后更新rightMax的值,如果height[right]大于rightMax,将rightMax更新为height[right]。
    最后,将right指针向左移动一位。

  5. 循环结束后,返回total即为最后的结果,即接到的雨水总量。

这个方法的时间复杂度是O(n),其中n是数组的长度。

相关文章

  • 限流

    限流算法: 1、漏桶算法:①流入水滴流入速率任意;②如果流入速率过快,超过了桶的容量,则直接丢弃水滴;③按照常量速...

  • 算法:接雨水

    问题 Given n non-negative integers representing an elevatio...

  • 五绝~雨中赏樱

    水滴悬枝冷,池塘接雨轻。 待到樱花落,与君驻足听。

  • iOS 接雨水算法Swift

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

  • Java算法(3):接雨水

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

  • 接雨水的算法题

    前几天看到一个算法题就写了一下如下: 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,...

  • Swift刷算法:接雨水

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

  • 算法小专栏:散列表(二)

    级别: ★☆☆☆☆标签:「算法」「Hash」「散列表」「哈希表」作者: MrLiuQ审校: QiShare团队 接...

  • 水滴水滴

    被上帝遗忘了 哭了一路 它也木有听见

  • 水滴水滴

    依照心蓝老师的那篇介绍文画的水滴(≧∇≦)/ 为森嘛高光笔不出水…明明之前画黑砖时能用啊(>﹏<)

网友评论

      本文标题:算法:接水滴

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