难度:困难
题目内容:
给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。
上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 感谢 Marcos 贡献此图。
image.png
示例:
输入: [0,1,0,2,1,0,1,3,2,1,2,1]
输出: 6
题解:
思路的话,可以先从左向右遍历,如果自己是已经遍历的最高的,然后有比自己高的,那么两者之间肯定是满水
之类的
可以算出来最后的水平面轮廓然后减去所有的柱子
class Solution:
def trap(self, height: List[int]) -> int:
curMax=height[0]
curMaxindex = 0
rain = 0#先把柱子一起计算,最后再删
for i in range(len(height)):
#最高的应该和之前最高的那个组成容器,容器的容积固定,即使再出现高的也不会增加
if height[i]>=curMax:
rain += (i - curMaxindex)* curMax
curMax = height[i]
curMaxindex = i
print(rain)
c = curMaxindex
curMax=height[len(height)-1]
curMaxindex = len(height)-1
for j in range(len(height)-1,c-1,-1):
print("j",j)
#倒序着一直到最高
if height[j]>=curMax:
rain += (j - curMaxindex)* curMax
curMax = height[j]
curMaxindex = j
print(rain)
# 两个方向都没有计算最高点
rain += height[c]
rain -= sum(height)
return rain
emmm好像不太对吼。。。
明天醒来再debug啦
网友评论