# 接雨水

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

 

示例 1:

输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]
输出:
6
解释:
上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。

示例 2:

输入:height = [4,2,0,3,2,5]
输出:
9

 

提示:

以下程序实现了这一功能,请你填补空白处的内容: ```cpp #include using namespace std; class Solution { public: int trap(vector &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 using namespace std; class Solution { public: int trap(vector &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++; } ```