leetcode 42 接雨水
z

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。

image-20190712172414638

上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。

示例:

输入: [0,1,0,2,1,0,1,3,2,1,2,1]
输出: 6


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Solution(object):
def trap(self, height):
"""
:type height: List[int]
:rtype: int
"""
left = [0]*len(height)
right = [0]*len(height)
h = 0
for i in range(0, len(height)):
left[i] = h
h = max(h, height[i])

h = 0
for i in range(len(height)-1, -1, -1):
right[i] = h
h = max(h, height[i])
ans = 0
for i in range(len(height)):
ans += max(0, min(left[i], right[i]) - height[i])
return ans