版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_20177327/article/details/82151900
解题思路:
- 可以发现被水填满后的形状是先升后降的塔形,因此,先遍历一遍找到塔顶,然后分别从两边开始,往塔顶所在位置遍历,水位只会增高不会减小,且一直和最近遇到的最大高度持平,这样知道了水位,就可以边遍历边计算面积;
class Solution {
public:
int trap(vector<int>& height)
{
if(height.size() <= 2)
return 0;
int temp = height[0];
int index = 0;
//找到塔形
for(int i = 0; i < height.size(); ++i)
{
if(height[i] > temp)
{
temp = height[i];
index = i;
}
}
int max_left = height[0];
int max_right = height[height.size() - 1];
int area = 0;
//从左往塔形
for(int i = 0; i < index; ++i)
{
max_left = max(max_left, height[i]);
area = area + (max_left - height[i]);
}
//从右到塔形
for(int j = height.size() - 1; j > index; --j)
{
max_right = max(max_right, height[j]);
area = area + (max_right - height[j]);
}
return area;
}
};