堆栈解

leetcode 42 接雨水
堆栈解往往是 一个一个压入 连续地弹出
如果当前元素小于等于栈顶的元素 将其压入堆栈 因为当前元素可以被栈内的前一个元素兜住
如果当前元素大于了栈顶的元素 那么栈顶的元素可以被左边和右边的元素兜住 我们就可以计算兜住的雨水
连续弹出的时候 看以看出 雨水是被一层一层计算出来的

class Solution:
    def trap(self, height):
        """
        :type height: List[int]
        :rtype: int
        """
        stack = []
        res = 0

        for i in range(len(height)):
            while stack and height[i] > height[stack[-1]]: # 当前元素比栈内最后一个元素大
                mid = stack.pop()
                if not stack:
                    break
                distance = i - stack[-1] - 1
                bounded_height = min(height[i], height[stack[-1]]) - height[mid]
                res += distance * bounded_height
            stack.append(i)
        return res
image.png

各种括号问题 先占坑吧...

全部评论

相关推荐

点赞 评论 收藏
分享
星期一的大老师:项目描述 和 技术栈单开一栏;八股文:算法与数据结构,计算机网络一定要写,操作系统不了解可以不写;Linux命令,Git,Docker基础命令和基本使用一定要写,要有实际使用场景的解决经验;项目的八股文上:redis 解决 缓存雪崩,缓存击穿,缓存穿透的解决方案,一个问题的不同方案可以一起用,不需要重复在两个项目写。第二个项目换一个。小厂可以投一投
投了多少份简历才上岸
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务