题目
给定 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
代码
#include <stdio.h>
#include <stdlib.h>
int trap(int *height, int heightSize);
int main()
{
int size = 3;
int height[12] = {0,2,0};
int t = trap(height, size);
printf("%d", t);
return 0;
}
int trap(int *height, int heightSize)
{
int left=1,right=heightSize-2;
int leftmax=height[0],rightmax=height[heightSize-1];
int sum=0;
while(left<=right)
{
leftmax=leftmax>height[left]?leftmax:height[left];
rightmax=rightmax>height[right]?rightmax:height[right];
if(leftmax>=rightmax)
{
sum+=rightmax-height[right];
right--;
}
else
{
sum+=leftmax-height[left];
left++;
}
}
return sum;
}