题目
给定 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;
}