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
Approach 1:
Java
class Solution {
public int trap(int[] height) {
int res = 0;
int max_left = height[0];
int max_right = height[height.length -1];
int lp = 0;
int rp = height.length - 1;
while(lp<=rp){
max_left = Math.max(max_left,height[lp]);
max_right = Math.max(max_right, height[rp]);
if(max_left < max_right) {
res += max_left - height[lp];
lp++;
}
else {
res += max_right - height[rp];
rp--;
}
}
return res;
}
}Agnibha ChandraApproach 2:
Java
class Solution {
public int trap(int[] height) {
if(height.length < 3) return 0;
int lm = height[0];
int rm = height[height.length - 1];
int lmax[] = new int[height.length -1];
int rmax[] = new int[height.length -1];
for(int i = 1; i< height.length-1; i++){
lm = Math.max(lm,height[i-1]);
lmax[i] = lm;
}
for(int j = height.length - 2; j > 0; j--) {
rm = Math.max(rm,height[j+1]);
rmax[j] = rm;
}
int water = 0;
for(int i = 1; i < height.length -1 ; i++)
{
water += Math.max((Math.min(lmax[i],rmax[i]) - height[i]),0);
}
return water;
}
}Agnibha Chandra