用 Python 编写程序来计算我们总共可以收集多少雨水
pythonserver side programmingprogramming更新于 2026/2/2 13:32:17
假设我们有一个包含 n 个非负整数的数组。这些整数表示高度,每个条的宽度为 1,我们必须计算下雨后可以收集多少水。因此地图将类似于 −

这里我们可以看到有 8 个蓝色框,所以输出将是 8。
为了解决这个问题,我们将遵循以下步骤 −
- 定义一个堆栈 st,water := 0 和 i := 0
- while i < size of height
- 如果堆栈为空或 height[stack top] >= height[i],则将 i 推入堆栈,将 i 增加 1
- 否则
- x := 堆栈顶部元素,从堆栈中删除顶部
- 如果堆栈不为空,则
- temp := height[stack top element] and height[i] 的最小值
- dest := 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
相关文章
有用资源
python 参考教程 - 该教程包含有关 python 的更多信息:https://www.cainiaomax.com/python/

