传送门
开始直接暴力会一直超时
可以先创建两个数组,保存从左向右和从右向左的最大值,空间换时间。
class Solution(object):
def trap(self, height):
"""
:type height: List[int]
:rtype: int
"""
lenh = len(height)
if lenh == 0:
return 0
ans = 0
max_left = [height[0]]
max_right = [0 for _ in range(lenh)]
max_right[lenh - 1] = height[lenh - 1]
for i in range(1, lenh):
max_left.append(max(max_left[i - 1], height[i]))
for j in range(lenh - 2, -1, -1):
max_right[j] = max(max_right[j + 1], height[j])
for i in range(lenh):
ans += min(max_left[i], max_right[i]) - height[i]
return ans
开始直接暴力一直超时
class Solution(object):
def trap(self, height):
"""
:type height: List[int]
:rtype: int
"""
lenh = len(height)
if lenh == 0:
return 0
ans = 0
for i in range(lenh):
left_max = right_max = 0
for j in range(i, -1, -1):
left_max = max(left_max, height[j])
for j in range(i, lenh):
right_max = max(right_max, height[j])
ans += min(left_max, right_max) - height[i]
return ans