LeetCode 042 Trapping Rain Water
阅读原文时间:2023年07月09日阅读:2

题目要求: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 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!

代码如下:

class Solution {
public:
int trap(int A[], int n) {

    int maxIdx = 0;  
    int water = 0;

    //找到最长的木板,设为maxIdx  
    for(int i = 1; i < n; i++){  
        if(A\[i\] > A\[maxIdx\]){  
            maxIdx = i;  
        }  
    }

    int max = A\[0\];

    //左侧逼近  
    for(int i = 1; i < maxIdx; i++){

        if(max < A\[i\])  
            max = A\[i\];  
        //木板左边(max)和右边(最高)都比它高,则可以放  
        // max - 该木板长度 的水  
        else  
            water += max - A\[i\];  
    }

    //右侧逼近  
    max = A\[n - 1\];  
    for(int i = n - 2; i >= maxIdx; i--){  
        if(max < A\[i\]) max = A\[i\];  
        else water += max - A\[i\];  
    }

    return water;

}  

};