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
.
The above elevation map 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. Thanks Marcos for contributing this image!
Subscribe to see which companies asked this question
#第一版代码,TLE
class Solution(object):
def trap(self, height):
"""
:type height: List[int]
:rtype: int
"""
if len(height) <= 2:
return 0
sum_water = 0
for i in range(len(height)):
for j in range(i)[::-1]:
temp = None
if len(height[j:i+1]) <= 2:
temp = (False,0)
min_height = min(height[j],height[i])
for h in height[j+1:i]:
if h > min_height:
temp = (False,0)
if temp == None:
temp = (True,min_height)
if temp[0]:
for p in range(len(height[j+1:i])):
sum_water += temp[1] - height[j+1+p]
height[j+1+p] = temp[1]
return sum_water
#第二版代码,出自http://www.xuebuyuan.com/1586534.html
class Solution(object):
def trap(self, height):
"""
:type height: List[int]
:rtype: int
"""
secHight = 0
left = 0
right = len(height) - 1
area = 0
while left < right:
if height[left] < height[right]:
secHight = max(height[left], secHight)
area += secHight-height[left]
left += 1
else:
secHight = max(height[right], secHight)
area += secHight-height[right]
right -= 1
return area