P7 - 接雨水
About 249 wordsLess than 1 minute
leetcodehot100
2025-1-10
题目
给定 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
提示:
n == height.length
1 <= n <= 2 * 104
0 <= height[i] <= 105
实现
class Solution {
public:
int trap(vector<int>& height) {
// 对向双指针 谁矮移动谁
// 直到遇到一个更大的柱子
int nums = height.size() - 1;
int LMAX = 0 , RMAX = 0;
int i = 0 , j = nums;
int res = 0;
while(i < j)
{
LMAX = max(LMAX , height[i]);
RMAX = max(RMAX , height[j]);
// 左边可兜住右边
if(LMAX > RMAX) {
res += RMAX - height[j];
j --;
} else {
res += LMAX - height[i];
i ++;
}
}
return res;
}
};