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.

 

只要找到最高的那个柱子,然后从两边往最高的那个柱子移动。

能存储多少水是由短的那个柱子决定的。

在i这个位置,如果我们知道i之前最高的柱子j,那么i这个位置能存的水就是height[j]-heigt[i]

class Solution {
public:
    int trap(vector<int>& height) {
        int size = height.size();
        if(size<=1){
            return 0;
        }
        int maxHeight = height[0];
        int maxHeightIndex = 0;
        for(int i=1;i<size;i++){
            if(height[i]>maxHeight){
                maxHeight = height[i];
                maxHeightIndex = i;
            }
        }
        int res = 0;
        int curMaxHeight = height[0];
        for(int i=1;i<maxHeightIndex;i++){
            if(height[i]<curMaxHeight){
                res += curMaxHeight-height[i];
            }else{
                curMaxHeight = height[i];
            }
        }
        curMaxHeight = height[size-1];
        for(int i=size-2;i>maxHeightIndex;i--){
            if(height[i]<curMaxHeight){
                res += curMaxHeight-height[i];
            }else{
                curMaxHeight = height[i];
            }
        }
        return res;
    }
};

 

posted @ 2015-11-29 20:02  zengzy  阅读(137)  评论(0编辑  收藏  举报
levels of contents