仔细想想,这道题可以从横坐标每格考虑。横坐标每格可能积攒的雨水量由这格左右最高高度的最小值和该格高度的差决定。无论整体结构如何,只要该格左右最高高度确定,那么该格能够积攒多少雨水就确定了。我们统计求和每一格即可得到最后结果。 思路就是先记录每格的左侧最高和右侧最高高度。在根据这两个数据和自身高度计算即可。
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;
}
};
计算积水体积
本文介绍了一种计算二维数组中能够容纳的积水体积的方法。通过预先计算每个位置左侧和右侧的最大高度,进而确定每个位置能容纳的水的高度。最终通过累加得到总的积水体积。
631

被折叠的 条评论
为什么被折叠?



