[leetcode] 42 Trapping Rain Water

来源:互联网 发布:电饭煲型号推荐 知乎 编辑:程序博客网 时间:2024/05/17 01:40

具体思路就是先计算所有柱子的面积,然后先从左到右然后从右到左把坑填满,计算一个面积

用第二个面积减去第一个面积就是所求,注意各种细节。特殊情况单独讨论。

class Solution {public:    int trap(vector<int>& height) {        //[0,1,0,2,1,0,1,3,2,1,2,1]        // 0  1 2 3 4 5 6 7 8 9 10        if(height.empty())        {            return 0;        }                int index=0;        int max = 0;         int maxunm=0;        int flag=0;        //寻找最大值的位置        for (int i = 0; i <height.size(); i++)            if (height[i] >= height[max])             {                max = i;                maxunm=height[max];            }        //柱子所占的面积        int pre=0;        for(int i=0;i<height.size();i++)        {            pre=pre+height[i];        }        if(maxunm==0)        {            return 0;        }        int sum=0;        if(height.size()<=2)        {            return 0;        }        for(int i=0,j=1;i<height.size()-2;i++,j++)        {            if(i<max)            {                if(height[i]>height[j])                {                    height[j]=height[i];                    flag=1;                }                else{                    continue;                }            }            else            {                if(height[i]<height[j])                {                    height[i]=height[j];                    flag=1;                }                else{                    continue;                }            }        }        for(int i=height.size()-2,j=height.size()-1;i>=0;i--,j--)        {            if(i<max)            {                if(height[i]>height[j])                {                    height[j]=height[i];                    flag=1;                }                else{                    continue;                }            }            else            {                if(height[i]<height[j])                {                    height[i]=height[j];                    flag=1;                }                else{                    continue;                }            }        }        for(int i=0;i<height.size();i++)        {            sum=sum+height[i];        }        //雨水的面积等于修改过后的面积减去之前柱子的面积        if(flag==1)        {            return sum-pre;        }        else        {            return 0;        }    }};


0 0
原创粉丝点击