42. Trapping Rain Water(数组积水)左右同时从低到高

题目:
给定n个代表海拔图的非负整数,其中每个条的宽度为1,计算下雨后它能捕获多少水。
输入: [0,1,0,2,1,0,1,3,2,1,2,1]
输出: 6

思路:
从两边开始,最左和最右比较,从较小的那一方开始,因为这样的话从这边开始的每一步的计算的都可以能够把水积住(因为短板效应)。设置左右的最大值,然后往中间去的过程中改变该值,如果遇见小于max的值,就用ta和max的差加到res中。

code:

class Solution {
public:
    int trap(vector<int>& height) {
        int left=0;
        int right=height.size()-1;
        int maxleft=0,maxright=0;               //灭有初始化错误
        int res=0;
         //当相遇到中间,说明两个的背后已经计算完毕
        while(left<=right){
            if(height[left]<= height[right]){
                //左边小从左边开始
                if(height[left] >=maxleft)
                    maxleft=height[left];
                else    res+= maxleft-height[left];
                
                left++;         //注意,他是先计算后再--的!
            }
            else 
            {
                if(height[right]>= maxright)    maxright=height[right];
                else    res+= maxright-height[right];
                
                right--;
            }
            
        }
        return res;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值