Trapping Rain Water
Question (LC.42)
Example
I: [0,1,2]
O: 0
I: [3,1,2]
O: 1
I: [0,1,0,2,1,0,1,3,2,1,2,1]
O: 6Analysis
Brute Force Three Pass
public int trap(int[] height) {
if (height == null || height.length == 0) {
return 0;
}
int n = height.length;
int[] leftBars = new int[n];
int[] rightBars = new int[n];
// assign left bars
int left = 0;
for (int i = 0; i < n; i++) {
left = Math.max(left, height[i]);
leftBars[i] = left;
}
// assign right bars
int right = 0;
for (int i = n - 1; i >= 0; i--) {
right = Math.max(right, height[i]);
rightBars[i] = right;
}
// compute the rain volume
int rain = 0;
for (int i = 1; i < n - 1; i++) {
int current = Math.min(leftBars[i], rightBars[i]) - height[i];
rain += current > 0 ? current : 0;
}
return rain;
}L/R Pointers
Follow Up (LC.407)
Last updated