Я сталкивался с этой проблемой в одной из экзаменационных статей и нашел одно решение в книге ответов. Я не могу понять алгоритм, стоящий за ним. Может ли кто-нибудь объяснить мне, как работает этот алгоритм?улавливание дождевой воды - массив
Приведенные 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;
}
}
Благодаря
Что не ясно? Что алгоритм делает, почему алгоритм работает? – WoDoSc
Возможный дубликат [Максимальный объем затопленной дождевой воды в 3D] (http://stackoverflow.com/questions/21818044/the-maximum-volume-of-trapped-rain-water-in-3d) – Ani