42.接雨水 python3

题目:

题目

解析:

这道题有两类解法,横向和纵向。

  • 纵向:只需要求解左边的最高值和右边的最高值,两者中较小的一个减去当前的高度,即为当前格子纵向的雨水量。
  • 横向:如果当前的格子高度大于前一个,小于前面第二个,则可以确定前一个的一段横向的积水量。

代码:

class Solution:
    def trap(self, height: List[int]) -> int:
        
        stack = []
        rain = 0
        
        for i in range(len(height)):
            while len(stack) >= 2 and height[stack[-1]] < height[i]:
                rain = rain + (min(height[stack[-2]], height[i]) - height[stack[-1]]) * (i - stack[-2] - 1)
                stack.pop()
                
            if len(stack) == 1 and height[i] > height[stack[-1]]:
                stack.pop()
                
            stack.append(i)
        
        return rain

小结:

栈是一种思想,而不仅仅是一种数据结构。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值