leetcode: Trapping Rain Water

本文介绍了一种计算二维数组中能够容纳的积水体积的方法。通过预先计算每个位置左侧和右侧的最大高度,进而确定每个位置能容纳的水的高度。最终通过累加得到总的积水体积。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

仔细想想,这道题可以从横坐标每格考虑。横坐标每格可能积攒的雨水量由这格左右最高高度的最小值和该格高度的差决定。无论整体结构如何,只要该格左右最高高度确定,那么该格能够积攒多少雨水就确定了。我们统计求和每一格即可得到最后结果。  思路就是先记录每格的左侧最高和右侧最高高度。在根据这两个数据和自身高度计算即可。

class Solution {
public:
    int trap(int A[], int n) {
        int res = 0;
        int h = A[0];
        vector<int> left(n);  
        vector<int> right(n);
        for( int i=0;i<n;i++ )
        {
            left[i] = h;
            if( A[i] > h )
            {
                h = A[i];
            }
        }
        h = A[n-1];
        for( int i=n-1;i>=0;i-- )
        {
            right[i] = h;
            if( A[i] > h )
            {
                h = A[i];
            }
        }
        for( int i=0;i<n;i++ )
        {
            int tmp = min(left[i],right[i])-A[i];
            if( tmp > 0 )
            {
                res += tmp;
            }
        }
        return res;
    }
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值