刷题笔记——单调栈

摘要:
保持栈的单调,只有栈为空或比栈顶大/小的元素才可入栈,否则出栈直到满足条件Inordertokeepthestackmonotonic,onlywhenthestackisemptyorthetopelementofthestackissmaller/biggerthantheinputone,theelementwillbepushedintothestack.Otherwise,popthee

保持栈的单调,只有栈为空或比栈顶大/小的元素才可入栈,否则出栈直到满足条件

In order to keep the stack monotonic, only when the stack is empty or the top element of the stack is smaller/bigger than the input one, the element will be pushed into the stack. Otherwise, pop the elements from the stack until the criteria meets.

For an example:

lettcode 84

在这个问题中,应用了单调栈的思想,只有比栈顶大的元素才可入栈

出栈时,对出栈元素的左右边界进行计算,栈顶的左边界为0,其他元素左右边界均为栈中相邻元素的数组下标,出栈元素的值*边界长度为待求子矩形的面积

classSolution:
    def largestRectangleArea(self, heights: [int]) ->int:
        if len(heights) == 0:return0
        max_stack =[]
        maxs =heights[0]
        for i inrange(len(heights)):
            if len(max_stack) == 0 or max_stack[-1][0] <=heights[i]:
                max_stack.append([heights[i], i])
            else:
                top = max_stack[-1][1]
                while len(max_stack) > 0 and max_stack[-1][0] >heights[i]:
                    last =max_stack.pop()
                    if len(max_stack) >0:
                        maxs = max(maxs, last[0] * (top - max_stack[-1][1]))
                    else:
                        maxs = max(maxs, last[0] * (top + 1))
                max_stack.append([heights[i], i])

        top = max_stack[-1][1]
        while len(max_stack) >0:
            last =max_stack.pop()
            if len(max_stack) >0:
                maxs = max(maxs, last[0] * (top - max_stack[-1][1]))
            else:
                maxs = max(maxs, last[0] * (top + 1))

        return maxs

免责声明:文章转载自《刷题笔记——单调栈》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇【Django】rest_framework 序列化自定义替换返回值Centos 安装 Harbor下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

Debian下安装NFS服务器

1.安装非常简单。在Debian系统下安装NFS非常简单。在NFS服务器上执行以下命令以#aptitunstallnfs内核服务器(默认情况下将安装portmap和NFS-common)。在客户端,您需要安装:#intelligent installnfs commonportmap 2。启动、停止并重新启动服务器:启动服务#/etc/init。d/nfs内...

Qt使用镜像源快速安装与更新

如果我们选择在线安装模式,那就更麻烦了,因为下载速度一般不慢。事实上,在中国,Qt图片来源很多,但很少有人使用。原因是Qt图像源做得不好。如果我们导入它,它将自动链接到官方图像源。因为它已经从官方来源同步,没有更改,所以我们无法逐个添加补丁,这太麻烦了。好吧,让我停止胡说八道。让我告诉你如何使用国产Qt图像源。...

如何根据角色批量激活SAP Fiori服务

我们知道Fiori的角色不同于ERP,即使您的帐户具有SAP_ALL权限,但当您打开Fiori时,它也是空的:只有在您将Fiori所需的角色添加到帐户并激活相关服务时,才能使用Fioriapp。否则,打开Fioriapps将报告错误。可以通过GUI事务代码找到特定错误:/n/iwfnd/error_Log以查看特定原因。...

【Lua】table表删除指定元素 (转)

删除表时,会找到一个表。remove(table,idx)方法用于根据表中的索引进行删除。当前要求是根据值进行删除。quick-x中还有一个相应的表方法封装:1.根据表中的值删除--删除表中的指定元素(而不是根据索引)--@paramarray要操作的容器--@paramvalue删除值--@paramremo...

Matlab自定义函数的五种方法 [转]

子函数lfg2只能被主函数和主函数中的其他子函数调用。特点是,它是基于Matlab的数值运算内核的,所以它的运算速度较快,程序效率更高。...

Win10阻止电脑关机时弹出正在关闭应用的方法及恢复

当计算机上安装了Windows 10时,当我们在未完成所有运行程序的情况下关闭计算机时,将弹出n个应用程序正在关闭并关闭的提示。第一步是创建一个自动关闭应用程序并将其添加到注册表的注册表文件。这可以解决在Windows 10系统计算机关闭时弹出提示关闭n个应用程序并关闭的问题。...