关闭

Trapping Rain Water

167人阅读 评论(0) 收藏 举报
分类:

此题是从两边往中间靠拢,这题的思路是这样子的:假如左端的高度比右端高,那么左端作为第一个高度,右端作为第二高度,从右端开始往左端扫描,只要碰到比第二高度低的点就加水柱的高度,如果碰到高的点,那么将这个点作为第一个高,原来的左端的高点作为第二高度点(这是必须第二高,否则不然将这个作为第一高度的点了),此时点从左端开始扫描到右端,相应加水柱,一次类推。

class Solution {
public:
    int trap(vector<int>& height) {
        int size=height.size();
        int left=0;
        int right=size-1;
        int secHeight=0;
        int area=0;
        while(left<right){
            if(height[left]<height[right]){
                secHeight=max(secHeight,height[left]);
                area+=(secHeight-height[left]);
                left++;
            }
            else{
                secHeight=max(secHeight,height[right]);
                area+=(secHeight-height[right]);
                right--;
            }
        }
        return area;
    }
};

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:57808次
    • 积分:1363
    • 等级:
    • 排名:千里之外
    • 原创:78篇
    • 转载:21篇
    • 译文:1篇
    • 评论:2条
    最新评论