LeetCode(16)接雨水【数组/字符串】【困难】

LeetCode(16)接雨水【数组/字符串】【困难】_第1张图片

目录

    • 1.题目
    • 2.答案
    • 3.提交结果截图

链接: 42. 接雨水

1.题目

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

示例 1:

LeetCode(16)接雨水【数组/字符串】【困难】_第2张图片

输入: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 * 10^4
  • 0 <= height[i] <= 10^5

2.答案

class Solution {
    public int trap(int[] height) {
        if (height.length <= 2) {
            return 0;
        }

        // 找到最大值
        int max = Arrays.stream(height).max().getAsInt();
        int maxPosition = 0;
        int leftH = 0;
        int water = 0;
        // 从左往右
        for (int i = 0; i < height.length; i++) {
            if (height[i] == max) {
                maxPosition = i;
                break;
            }
            leftH = Math.max(leftH, height[i]);
            if (height[i] < leftH) {
                water += leftH - height[i];
            }
        }
        // 从右往左
        int rightH = 0;
        for (int i = height.length - 1; i >= maxPosition; i--) {
            rightH = Math.max(rightH, height[i]);
            if (height[i] < rightH) {
                water += rightH - height[i];
            }
        }
        return water;
    }
}

3.提交结果截图

LeetCode(16)接雨水【数组/字符串】【困难】_第3张图片

整理完毕,完结撒花~

你可能感兴趣的:(LeetCode,leetcode,算法,职场和发展)