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.
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.
Input: height = [4,2,0,3,2,5] Output: 9
n == height.length
1 <= n <= 2 * 104
0 <= height[i] <= 105
impl Solution {
pub fn trap(height: Vec<i32>) -> i32 {
let mut left_max = vec![0; height.len()];
let mut right_max = vec![0; height.len()];
for i in 1..height.len() {
left_max[i] = left_max[i - 1].max(height[i - 1]);
}
for i in (0..height.len() - 1).rev() {
right_max[i] = right_max[i + 1].max(height[i + 1]);
}
(0..height.len())
.map(|i| (left_max[i].min(right_max[i]) - height[i]).max(0))
.sum()
}
}