• 边工作边刷题:70天一遍leetcode: day 23-3


    Largest Rectangle in Histogram

    这题就是背吧,实际考的概率比较小,考的时候千万别装逼,直说自己见过。
    如何背?

    • 画面感要强
    • 先递增入栈 => 一个低的卡在那,先出栈作为高度,然后栈头作为left => 卡在那的知道又递增了再入栈
    • 最后以n做右边界重复上面低的卡在那的逻辑

    EDIT: 5/4/16
    更好的方法是左右设定一个边界,这样不用单独处理corner case,在循环内搞定。左边界加在stack里,用(index=-1,h=-1),右边界在高度数组里为-1。这样当所有高度检查过,最后高度一定小于栈内,从而会出栈。而在pop栈内高度后,左边界总是小于当前,所以不会出栈。

    class Solution(object):
        def largestRectangleArea(self, heights):
            """
            :type heights: List[int]
            :rtype: int
            """
            stk = []
            area = 0
            n = len(heights)
            for i in range(n):
                if not stk or heights[i]>=stk[-1][0]:
                    stk.append((heights[i],i))
                else:
                    while stk and stk[-1][0]>=heights[i]:
                        h = stk.pop()[0]
                        if not stk:
                            left = -1
                        else:
                            left = stk[-1][1]
                            
                        if area<(i-left-1)*h:
                            area=(i-left-1)*h
                        
                    stk.append((heights[i],i))
                
            while stk:
                h = stk.pop()[0]
                if not stk:
                    left = -1
                else:
                    left = stk[-1][1]
                if area<(n-left-1)*h:
                    area=(n-left-1)*h
    
            return area
                
                
    
  • 相关阅读:
    正则去掉 html标签
    app内嵌 h5页面 再滑动的时候 触发击穿底下的一些touchstart事件
    设置按钮不能连续点击并触发点击事件
    使用NPOI导入导出标准Excel
    ASP.NET导出word实例
    常用SQL语句大全总结
    判断以及防止SQL注入
    javascript 正则表达式总结
    前端页面优化技巧
    自我介绍
  • 原文地址:https://www.cnblogs.com/absolute/p/5677991.html
Copyright © 2020-2023  润新知