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 is able to trap after raining.
class Solution(object):
def trap(self, height):
"""
:type height: List[int]
:rtype: int
"""
l, r = 0, len(height) - 1
water = 0
while l < r and height[l+1] >= height[l]:
l += 1
while l < r and height[r-1] >= height[r]:
r -= 1
while(l < r):
if height[l] < height[r]:
level = height[l]
l += 1
while l < r and height[l] <= level:
water = water + level - height[l]
l += 1
else:
level = height[r]
r -= 1
while l < r and height[r] <= level:
water = water + level - height[r]
r -= 1
return water
从地势的两头算起,如果中间高两头低是无法存水的。当存在中间的洼地时,存在存水的空间,并以此时的两端作为边沿,以两端较低的一个作为水平,往中间测算,如果靠近中间的地势低于水平,则存水量应为水平减去地势,如果高于水平,则该点作为新的边沿,重新计算水平。