LeetCode : Trapping Rain Water

来源:互联网 发布:php删除二维数组重复 编辑:程序博客网 时间:2024/04/29 06:18

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) {        // Start typing your C/C++ solution below        // DO NOT write int main() function        if(n == 0) return 0;        vector<int> left(n);        vector<int> right(n);        int sum = 0;        int leftMax = 0;        int rightMax = 0;        for(int i = 0, j = n-1; i<n; ++i, --j){            if(A[i] > leftMax){                leftMax = A[i];            }            left[i] = leftMax;            if(A[j] > rightMax)                rightMax = A[j];            right[j] = rightMax;        }        for(int i = 0; i< n; ++i){            int min = left[i] < right[i] ? left[i] : right[i];            sum += min - A[i];        }        return sum;    }};


原创粉丝点击