Given n non-negative integers representing an elevation map where the width of each bar is 1, compute how much water it is able to trap after raining.
For example,
Given [0,1,0,2,1,0,1,3,2,1,2,1]
, return 6
.
The above elevation map is represented by array [0,1,0,2,1,0,1,3,2,1,2,1]. In this case, 6 units of rain water (blue section) are being trapped. Thanks Marcos for contributing this image!
代码:储存水的量主要决定与最高的木板,首先找到最长木板的下表maxindex,然后从左至manindex进行遍历,max用于保存当前遍历到的最长木板的长度,若A[i] < max, 储水量加上max + A[i];若A[i] = max, max = A[i]。 最后从右至maxindex遍历,处理方式与上面一样。
public static int trap(int[] A)
{
int result = 0, max = 0,maxindex = 0;
for(int i = 0 ; i < A.length; i++)
if(A[i] > A[maxindex])
maxindex = i;
for(int i = 0; i < maxindex; i++)
{
if(A[i] >= max)
max = A[i];
else
{
result += max - A[i];
}
}
max = 0;
for(int i = A.length - 1; i > maxindex; i--)
{
if(A[i] >= max)
max = A[i];
else
result += max - A[i];
}
return result;
}