42. Trapping Rain Water

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`
• `0 <= n <= 3 * 104`
• `0 <= height[i] <= 105`

42. Trapping Rain Water
``````struct Solution;

impl Solution {
fn trap(height: Vec<i32>) -> i32 {
let n = height.len();
if n == 0 {
return 0;
}
let mut l = 0;
let mut r = n - 1;
let mut level = 0;
let mut res = 0;
while l < r {
if height[l] < height[r] {
let lower = height[l];
level = level.max(lower);
res += level - lower;
l += 1;
} else {
let lower = height[r];
level = level.max(lower);
res += level - lower;
r -= 1;
}
}
res
}
}

#[test]
fn test() {
let height = vec![0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1];
let res = 6;
assert_eq!(Solution::trap(height), res);
}
``````