Learn how to solve the trapping rain water problem in javascript.
The problem statement is read as given an array of non-negative integers representing the elevation wall calculate the amount of rain water that can trapped inside it.
Example
Input: [0,1,0,2,1,0,1,3,2,1,2,1] Output: 6

We are going to see two different solutions.
- Naive using brute force.
- An efficient approach.
Naive approach using brute force.
Conceptually it works as follows:
- If there is greater wall then there is potential that water can be stored.
- So calculate the amount of water that can be stored.
- While doing this keep track of the longest wall. Because it will help to calculate the rain water that can be stored above the current.
const trap = (height) => {
let largest = height[0];
let largestIndex = 0;
let water = 0;
for(let i=1; i height[i-1]) {
// what is the max water level
let fill = Math.min(largest, height[i]);
// fill in the water between largest and i
for(let j=largestIndex+1; j largest) {
largest = height[i];
largestIndex = i;
}
}
}
return water;
};
Input: console.log(trap([0,1,0,2,1,0,1,3,2,1,2,1])); Output: 6
Time complexity: O(n ^ 2).
Space complexity: O(1).
An efficient approach to find the trapping rain water in javascript.
- In this approach we start calculating the water trapped from both the ends and then combine them together to return the total.
- If the right wall is greater the left walls then calculate the amount of water that could be stored there and move further.
const trap = (height) => {
let leftMax = -1,
rightMax = -1,
left = 0,
right = height.length - 1,
water = 0;
while (left <= right) {
//Get the max wall height from both the ends
leftMax = height[left] > leftMax ? height[left] : leftMax
rightMax = height[right] > rightMax? height[right] : rightMax
//calculate the amount of water trapped
if (leftMax > rightMax) {
water += rightMax - height[right]
right--
}
else {
water += leftMax - height[left]
left++
}
}
return water
};
Input: console.log(trap([0,1,0,2,1,0,1,3,2,1,2,1])); Output: 6
Time complexity: O(n).
Space complexity: O(1).