Do the same for right to left
We can do the exact same thing from right to left. This will be accumulated in a new array named right[]
.
So finally, we get the two arrays left[]
and right[]
that we can use to get the maximum water level at each column. See the code to understand how we got these two.
xxxxxxxxxx
31
console.log(totalRain(arr));
function totalRain(heights) {
if (heights === null || heights.length <= 2)
return 0;
​
let N = heights.length;
let max = 0;
let left = Array(N).fill(0);
let right = Array(N).fill(0);
​
// scan from left to right
max = heights[0];
left[0] = max;
for (let i = 1; i < N; i++) {
if (heights[i] > max) {
max = heights[i];
}
left[i] = max;
}
// scan from right to left
max = heights[N - 1];
right[N - 1] = max;
for (let i = N - 2; i >= 0; i--) {
if (heights[i] > max) {
max = heights[i];
}
right[i] = max;
}
return right;
}
OUTPUT
:001 > Cmd/Ctrl-Enter to run, Cmd/Ctrl-/ to comment