Pasé días pensando en la solución, pensé que la tenía péro no tuve en cuenta los espacios ocupados de las columnas – me rendí y me documenté un poco en leetCode y llegué a este código en C# que pasó las pruebas
private int getTrappedWater(List<int> heights)
{
int p1 = 0;
int p2 = heights.Count-1;
int trappedWater = 0;
int maxLHeight = 0;
int maxRHeight = 0;
while (p1<p2)
{
if (heights[p1] < heights[p2])
{
if (heights[p1] < maxLHeight)
{
trappedWater += maxLHeight - heights[p1];
} else
{
maxLHeight = heights[p1];
}
p1++;
} else
{
if (heights[p2] < maxRHeight)
{
trappedWater += maxRHeight - heights[p2];
} else
{
maxRHeight = heights[p2];
}
p2--;
}
}
return trappedWater;
}
y en javascript
function trappedWater(listOfColumns){
let p1 = 0;
let p2 = listOfColumns.length-1; //10
let trappedWater = 0;
let maxLHeight = 0;
let maxRHeight = 0;
while (p1<p2) {
if (listOfColumns[p1] < listOfColumns[p2]) {
if (listOfColumns[p1] < maxLHeight) {
trappedWater += maxLHeight-listOfColumns[p1];
} else{
maxLHeight = listOfColumns[p1];
}
p1++;
}else{
if (listOfColumns[p2] < maxRHeight) {
trappedWater += maxRHeight - listOfColumns[p2];
} else{
maxRHeight = listOfColumns[p2];
}
p2--;
}
console.log(`p1: ${p1}, p2:${p2}`);
console.log(`trappedWater: ${trappedWater}, maxLHeight: ${maxLHeight}, maxRHeight: ${maxRHeight}`);
}
return trappedWater;
}
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?