Trap Water
Given n non-negative integers representing an elevation map where the width of each bar is 1, compute how much water it is able to trap after raining.
For example,
Given [0,1,0,2,1,0,1,3,2,1,2,1]
, return 6
.
Solution
class Solution(object):
def trap(self, height):
"""
:type height: List[int]
:rtype: int
"""
l, r = 0, len(height) - 1
level, water = 0, 0
while l < r:
lower = height[l] if height[l] < height[r] else height[r]
if height[l] < height[r]:
l+=1
else:
r-=1
level = max(level, lower)
water += level - lower
return water
public class Solution {
public int trap(int[] height) {
if(height.length < 3) return 0;
int l = 0, r = height.length - 1, ans = 0;
while(l < r && height[l] <= height[l+1]) l ++;
while(l < r && height[r] <= height[r - 1]) r--;
while(l < r) {
int left = height[l], right = height[r];
if(left <= right) {
while(l < r && left >= height[++l])
ans += left - height[l];
} else {
while(l < r && right >= height[--r])
ans += right - height[r];
}
}
return ans;
}
}