力扣热题100 42. 接雨水

42. 接雨水

在这里插入图片描述
代码:

 int trap(vector<int>& height) {
        int sum=0,min=0,max=0;
        int i=0,j=height.size()-1;
        while(i<j){
            //while(height[i]<height[i+1]) i++;
            //while(height[j]<height[j-1]) j--;
            while (i < j && i + 1 < height.size() && height[i] < height[i + 1]) i++;
            while (i < j && j - 1 >= 0 && height[j] < height[j - 1]) j--;
            if(i>=j)break;
            if(height[i]>height[j]){
                max=height[i];min=height[j];j--;
                //cout<<"左大  i:"<<i<<" j:"<<j<<" min:"<<min<<" max:"<<max<<" sum:"<<sum<<endl;system("pause");
                while(i<j && min>=height[j]){
                    sum+=min-height[j];
                    j--;
                }
            }
            else{
                max=height[j];min=height[i];i++;
                //cout<<"右大  i:"<<i<<" j:"<<j<<" min:"<<min<<" max:"<<max<<" sum:"<<sum<<endl;system("pause");
                while(i<j && min>=height[i]){
                    sum+=min-height[i];
                    i++;
                }
            }
        }
        return sum;
    }

注意:会报越界错误:

while(height[i]<height[i+1]) i++;
while(height[j]<height[j-1]) i--;

测试例子:[5,4,1,2]

在这里插入图片描述
所以要改为:

 while (i < j && i + 1 < height.size() && height[i] < height[i + 1]) i++;
 while (i < j && j - 1 >= 0 && height[j] < height[j - 1]) j--;
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值