美文网首页
LeetCoder-Trapping Rain Water

LeetCoder-Trapping Rain Water

作者: 圣地亚哥_SVIP | 来源:发表于2018-07-16 15:51 被阅读0次

    Trapping Rain Water
    题目解析:
    给定一个大小为n的非负整数集合,代表一个容器。容器的宽度(bar)为1,计算这个容器可以存储多少水。

    思路:
    计算每一个bar可以存储的容量,相加就是总的容量。每一个bar的容量取决于其左右两侧的最小高度,因此分别从头及尾遍历此数组,计算每一个Bar其左右两侧的最大高度。最后遍历数组,根据本身高度及左右两侧高度计算每一个bar的容量。

    代码如下:

    class Solution {
    public:
        int trap(vector<int>& height) {
            vector<int> high_r;
            vector<int> high_l;
            int max=0;
            int res = 0;
            for (int i=0;i<height.size();++i){
                if (i==0){
                    high_l.push_back(max);
                    continue;
                }
                if (max < height[i-1]){
                    max = height[i-1];
                    
                }
                high_l.push_back(max);
            }
            max = 0;
            for (int i=height.size()-1;i>=0;--i){
                if (i==height.size()-1){
                    high_r.push_back(max);
                    continue;
                }
                if (max < height[i+1]){
                    max = height[i+1];
                    
                }
                high_r.push_back(max);
            }
            int len = height.size()-1;
            //reverse(high_l.begin(),high_l.end());
            for (int i = 0;i<height.size();++i){
                int high = high_r[len-i]>high_l[i]? high_l[i]:high_r[len-i];
                //cout<<"index: "<<i<<"; High: "<<high<<","<<endl;
                
                if (high>=height[i]){
                    res += high-height[i];
                }
            }
            
            return res;
        }
    };
    

    相关文章

      网友评论

          本文标题:LeetCoder-Trapping Rain Water

          本文链接:https://www.haomeiwen.com/subject/pnsbpftx.html