堆栈解

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

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 14,739评论 0 38
  • Java byte code 的学习意义 为啥要学java bytecode,这就跟你问我已经会python了为...
    shanggl阅读 5,648评论 0 3
  • 前方高能预警,本文较长,涉及到的原理性东西较多,建议收藏方便后期查看。 我们常常说堆栈堆栈,但是堆和栈其实是完全不...
    幸运的芳1990阅读 23,061评论 4 43
  • 图文:真念一思 月落西山清辉淡,霞出东方焰火浓 最是一日晨光好,破晓月落霞出时
    臻念阅读 4,666评论 8 23
  • 最近几天一直在喜马拉雅听(断舍离)这本书,因之前有听过看过(扫除力),断、舍、离 的观点我是很容易理解和接...
    憧憬未来2016阅读 1,410评论 0 0