题目描述
给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。

上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 感谢 Marcos 贡献此图。
示例:
输入: [0,1,0,2,1,0,1,3,2,1,2,1]
输出: 6
题目分析
我能想到的就是暴力解法,从开始到结尾遍历每一滴雨水,对该求该雨滴左右两边最大的高度,取小的高度,再减去该雨滴的高度就是该雨滴面积。画图表示

那么该雨滴当前能存水为min(c,b)-a,依次遍历数组中每滴雨水,但排除数组中第一个数据和最后一个数据,因为两边没有极值。
class Solution {
public:
int trap(vector<int>& height)
{
int ans = 0;
int size = height.size();
for (int i = 1; i < size - 1; i++) {
int max_left = 0, max_right = 0;
//s搜该雨滴左边最大的高度
for (int j = i; j >= 0; j--) {
max_left = max(max_left, height[j]);
}
//s搜该雨滴左边最大的高度
for (int j = i; j < size; j++) { //Search the right part for max bar size
max_right = max(max_right, height[j]);
}
//计算该数据能接到的雨滴数量
ans += min(max_left, max_right) - height[i];
}
return ans;
}
};
1626

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



