[LeetCode]42 接雨水

题目描述

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

img

上面是由数组 [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
23
24
25
26
27
class Solution:
def trap(self, height):
"""
:type height: List[int]
:rtype: int
"""
if len(height)<1:
return 0
maxheight, maxid = 0, -1
for i in range(len(height)):
if height[i]>maxheight:
maxheight =height[i]
maxid = i
once = height[0]
res = 0
for i in range(maxid):
if height[i]>once:
once = height[i]
continue
res += once - height[i]
once = height[-1]
for i in range(len(height)-1, maxid, -1):
if height[i]>once:
once = height[i]
continue
res += once - height[i]
return res