# 接雨水

<p>给定 <em>n</em> 个非负整数表示每个宽度为 1 的柱子的高度图，计算按此排列的柱子，下雨之后能接多少雨水。</p><p> </p><p><strong>示例 1：</strong></p><p><img src="https://img-service.csdnimg.cn/img_convert/eb3d1efe3faa6dfe31363f4009af2a48.png" style="height: 161px; width: 412px;" /></p><pre><strong>输入：</strong>height = [0,1,0,2,1,0,1,3,2,1,2,1]<strong><br />输出：</strong>6<strong><br />解释：</strong>上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图，在这种情况下，可以接 6 个单位的雨水（蓝色部分表示雨水）。 </pre><p><strong>示例 2：</strong></p><pre><strong>输入：</strong>height = [4,2,0,3,2,5]<strong><br />输出：</strong>9</pre><p> </p><p><strong>提示：</strong></p><ul>	<li><code>n == height.length</code></li>	<li><code>0 <= n <= 3 * 10<sup>4</sup></code></li>	<li><code>0 <= height[i] <= 10<sup>5</sup></code></li></ul>

以下程序实现了这一功能，请你填补空白处的内容：

```cpp
#include <bits/stdc++.h>
using namespace std;
class Solution
{
public:
	int trap(vector<int> &height)
	{
		int res = 0;
		int left = 0, left_max = 0;
		int right = height.size() - 1, right_max = 0;
		while (left < right)
		{
			_____________________;
		}
		return res;
	}
};
```

## template

```cpp
#include <bits/stdc++.h>
using namespace std;
class Solution
{
public:
	int trap(vector<int> &height)
	{
		int res = 0;
		int left = 0, left_max = 0;
		int right = height.size() - 1, right_max = 0;
		while (left < right)
		{
			if (height[left] < height[right])
			{
				if (height[left] > left_max)
				{
					left_max = height[left];
				}
				else
				{
					res += left_max - height[left];
				}
				left++;
			}
			else
			{
				if (height[right] > right_max)
				{
					right_max = height[right];
				}
				else
				{
					res += right_max - height[right];
				}
				right--;
			}
		}
		return res;
	}
};
```

## 答案

```cpp
if (height[left] < height[right])
{
	if (height[left] > left_max)
	{
		left_max = height[left];
	}
	else
	{
		res += left_max - height[left];
	}
	left++;
}
else
{
	if (height[right] > right_max)
	{
		right_max = height[right];
	}
	else
	{
		res += right_max - height[right];
	}
	right--;
}
```

## 选项

### A

```cpp
if (height[left] < height[right])
{
	if (height[left] > left_max)
	{
		left_max = height[left];
	}
	else
	{
		res += left_max - height[left];
	}
	left--;
}
else
{
	if (height[right] > right_max)
	{
		right_max = height[right];
	}
	else
	{
		res += right_max - height[right];
	}
	right++;
}
```

### B

```cpp
if (height[left] < height[right])
{
	if (height[left] > left_max)
	{
		left_max = height[left];
	}
	else
	{
		res += left_max + height[left];
	}
	left++;
}
else
{
	if (height[right] > right_max)
	{
		right_max = height[right];
	}
	else
	{
		res += right_max + height[right];
	}
	right--;
}
```

### C

```cpp
if (height[left] < height[right])
{
	if (height[left] > left_max)
	{
		left_max = height[left];
	}
	else
	{
		res += left_max + height[left];
	}
	left--;
}
else
{
	if (height[right] > right_max)
	{
		right_max = height[right];
	}
	else
	{
		res += right_max + height[right];
	}
	right++;
}
```