Trapping Rain Water
题目大意
给你一个非负的数组,假设其宽度为1,试问按如下规则能装多少水:
我的解法&优解
解题思路
如下图所示,最终的临界点,从左到最高点和从右到最高点,一定是递增的。因此,从两端往中间遍历即可。
代码
class Solution {
public:
int trap(vector<int>& height) {
int left_max = 0;
int right_max = 0;
int left = 0;
int right = height.size() - 1;
int container = 0;
while(left<=right)
{
if(left_max > right_max)
{
if(height[right] > right_max)
{
right_max = height[right];
}
else
{
container += right_max - height[right];
}
right--;
}
else
{
if(height[left] > left_max)
{
left_max = height[left];
}
else
{
container += left_max - height[left];
}
left++;
}
}
return container;
}
};