描述
给出n个数字,表示一个高程图,高程图中每一条的宽度为1,请计算下雨之后这个地形可以存储多少水
例如
给出[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个单位的雨水(蓝色部分)被存储。
示例1
输入:
[0,1,0,2,1,0,1,3,2,1,2,1]
返回值:
6
class Solution {
public:
int trap(int A[], int n) {
if (n <= 2) return 0;
int lefttop = A[0], righttop = A[n - 1];
int i = 1, j = n - 2;
int sums = 0;
while (i <= j) {
if (lefttop > righttop) {
sums += max(0, righttop - A[j]);
righttop = max(righttop, A[j]);
--j;
}
else {
sums += max(0, lefttop - A[i]);
lefttop = max(lefttop, A[i]);
++i;
}
}
return sums;
}
};