Python中计算可以收集总降雨量的程序

Python中计算可以收集总降雨量的程序

假设我们有一个非负整数的数组n,它们代表每个条的高度,每个条的宽度为1,我们需要计算在降雨后它能收集多少水。因此地图将如下所示−

Python中计算可以收集总降雨量的程序

在这里,我们可以看到有8个蓝色的盒子,所以输出将是8。

为了解决这个问题,我们需要遵循以下步骤−

  • 定义一个stack st,water: = 0和i: = 0
  • 当 i <height的大小时
    • 如果堆栈为空或height[stack top] >= height[i],则将i推入堆栈,将i增加1
    • 否则
      • x: =堆栈顶部元素,从堆栈中删除顶部
      • 如果堆栈不为空,则
      • temp:= height [stack top element]和height [i]的最小值
      • 目的地:= i-stack top element-1
      • water:= water + dist *(temp-height [x])
  • 返回water

让我们看以下实现以更好地理解−

更多Python相关文章,请阅读:Python 教程

例子

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教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程