用 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

相关文章


有用资源