文章 224
评论 6
浏览 200759
Array - 42. Trapping Rain Water Hard

Array - 42. Trapping Rain Water Hard

42. 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.

null
The above elevation map is represented by array [0,1,0,2,1,0,1,3,2,1,2,1]. In this case, 6 units of rain water (blue section) are being trapped. Thanks Marcos for contributing this image!

Example:

Input: [0,1,0,2,1,0,1,3,2,1,2,1]
Output: 6

思路:

题目意思是给定一个数组,数值代表了高度,求解可以装多少水,仔细分析可以发现,对于任意一位能存储多少水是取决于左右当前元素左右两边最大值的最小值来减去当前元素就是当前节点能装多少水,公式就类似:trap[i] = min(maxHight(0,i-1), maxHight(i+1, n)) - height[i]trap[i]是当前位置可以装多少水,maxHight就分别是左右两边的最大高度,采用首尾指针,通过标记左右最大高度来计算是否可以。

代码:

java:

class Solution {

    public int trap(int[] height) {
        if (height == null || height.length <= 1) return 0;
        
        int res = 0;
        int leftMax = 0;
        int rightMax = 0;
        
        for (int left = 0, right = height.length-1; left < right;) {
            if (height[left] < height[right]) {
                leftMax = Math.max(leftMax, height[left]);
                res += leftMax - height[left++];
            } else {
                rightMax = Math.max(rightMax, height[right]);
                res += rightMax - height[right--];
            }
        }
        
        return res;
    }
}

go:

func trap(height []int) int {

    var res int
    if height == nil || len(height) == 0 {
        return res
    }
    
    leftMax := 0
    rightMax := 0
    left := 0
    right := len(height) - 1
    
    for left != right {
        if height[left] < height[right] {
            leftMax = max(leftMax, height[left])
            
            res += leftMax - height[left]
            left++
        } else {
            rightMax = max(rightMax, height[right])
            
            res += rightMax - height[right]
            right--
        }
    }
    
    return res
}

func max(i, j int) int {
    if i > j {
        return i
    }
    return j
}

标题:Array - 42. Trapping Rain Water Hard
作者:michael
地址:https://www.bitbo-liuyang.com/articles/2019/06/16/1560691255419.html

Nothing just happens, it's all part of a plan.

取消