Python程序:计算雨水收集总量
假设我们有一个包含n个非负整数的数组。这些整数代表高度,每个柱的宽度为1,我们需要计算下雨后能够收集多少雨水。地图如下所示:
这里可以看到有8个蓝色方块,所以输出为8。
为了解决这个问题,我们将遵循以下步骤:
- 定义一个栈st,water := 0,i := 0
- 当i < height的长度时
- 如果栈为空或height[栈顶] >= height[i],则将i压入栈中,i加1
- 否则
- x := 栈顶元素,从栈中弹出栈顶元素
- 如果栈不为空,则
- temp := height[栈顶元素] 和 height[i] 的最小值
- dist := i – 栈顶元素 – 1
- water := water + dist * (temp – height[x])
- 返回water
让我们来看下面的实现以更好地理解:
示例
class Solution(object): def trap(self, height): stack = [] water = 0 i=0 while i<len(height): if len(stack) == 0 or height[stack[-1]]>=height[i]: stack.append(i) i+=1 else: x = stack[-1] stack.pop() if len(stack) != 0: temp = min(height[stack[-1]],height[i]) dist = i - stack[-1]-1 water += dist*(temp - height[x]) return water ob = Solution() print(ob.trap([2,5,2,0,5,8,8]))
输入
[2,5,2,0,5,8,8]
输出
8
广告