解题思路
题目链接: https://leetcode-cn.com/problems/trapping-rain-water/
属于困难类别的题目,只要理清思路就不难了。
成立条件:
- 两端必然形成一个大木桶
- 木板低的一端的雨水必然可以接上,因为另外一个终端有一条更高的木板
算法:
3. 从木板低端开始计算,只要中间有比这个木板还低的木板,那么这些高度差之间必然可以接雨水
4. 如果出现更高的木板,那么久以这个更高的木板作为新的低端,与另外一端比较高低
5. 重新开始第1步,如此循环
代码
class Solution {
public:
int trap(vector<int>& height) {
int b = (int)height.size() - 1;
if (b < 2) return 0;
int a = 0;
int marea = 0;
while(a < b)
{
if (height[a] < height[b])
{
int h = height[a];
while (++a < b)
{
if (height[a] > h)
break;
else marea += h - height[a];
}
}
else
{
int h = height[b];
while (a < --b)
{
if (height[b] > h)
break;
else marea += h - height[b];
}
}
}
return marea;
}
};