【发布时间】:2015-06-19 14:07:59
【问题描述】:
我在一份试卷中解决了这个问题,并在答案簿中找到了一个解决方案。我无法理解它背后的算法。谁能解释一下这个算法是如何工作的?
给定 n 个非负整数表示海拔图,其中每个条的宽度为 1,计算下雨后它能够捕获多少水。
例如,给定输入
[0,1,0,2,1,0,1,3,2,1,2,1]
返回值是
6
根据答案簿的解决方案是这样的
public class Solution {
public int trap(int[] height) {
if (height.length <=2 )
return 0;
int h = 0, sum = 0, i = 0, j = height.length - 1;
while(i < j)
{
if ( height[i] < height[j] )
{
h = Math.max(h,height[i]);
sum += h - height[i];
i++;
}
else
{
h = Math.max(h,height[j]);
sum += h - height[j];
j--;
}
}
return sum;
}
}
谢谢
【问题讨论】:
-
什么不清楚?该算法做什么?为什么该算法有效?