Problem
Given n
non-negative integers representing an elevation map where the width of each bar is 1
, compute how much water it can trap after raining.
Example 1:
Input: height = [0,1,0,2,1,0,1,3,2,1,2,1] Output: 6 Explanation: The above elevation map (black section) is represented by array [0,1,0,2,1,0,1,3,2,1,2,1]. In this case, 6 units of rain water (blue section) are being trapped.
Example 2:
Input: height = [4,2,0,3,2,5] Output: 9
Constraints:
n == height.length
1 <= n <= 2 * 104
0 <= height[i] <= 105
Solution
First attempt : Stack method
/**
* @param {number[]} height
* @return {number}
*/
function trap(height) {
let water = 0;
let stack = [];
for (let current = 0; current < height.length; current++) {
while(stack.length != 0 && height[current] > height[stack[stack.length - 1]]){
let top = stack.pop();
if(stack.length === 0){
break;
}
let distance = current - stack[stack.length - 1] - 1;
let bounded_height = Math.min(height[current], height[stack[stack.length - 1]]) - height[top];
water += distance * bounded_height;
}
stack.push(current);
}
return water;
}
Second attempt : Two pointer method
/**
* @param {number[]} height
* @return {number}
*/
function trap(height) {
let left = 0, right = height.length - 1;
let maxLeft = 0, maxRight = 0;
let water = 0;
while (left < right) {
if (height[left] <= height[right]) {
if (height[left] >= maxLeft) {
maxLeft = height[left];
} else {
water += maxLeft - height[left];
}
left++;
} else {
if (height[right] >= maxRight) {
maxRight = height[right];
} else {
water += maxRight - height[right];
}
right--;
}
}
return water;
}
A freelance web developer with a decade of experience in creating high-quality, scalable web solutions. His expertise spans PHP, WordPress, Node.js, MySQL, MongoDB, and e-commerce development, ensuring a versatile approach to each project. Aadi’s commitment to client satisfaction is evident in his track record of over 200 successful projects, marked by innovation, efficiency, and a customer-centric philosophy.
As a professional who values collaboration and open communication, Aadi has built a reputation for delivering projects that exceed expectations while adhering to time and budget constraints. His proactive and problem-solving mindset makes him an ideal partner for anyone looking to navigate the digital landscape with a reliable and skilled developer.