当前位置: 首页 > news >正文

Leetcode-最大矩形(单调栈)

一、题目描述

给定一个仅包含 0 和 1 、大小为 rows x cols 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。

输入:matrix = [["1","0","1","0","0"],["1","0","1","1","1"],["1","1","1","1","1"],["1","0","0","1","0"]]
输出:6
解释:最大矩形如上图所示。

二、思路分析

 暴力枚举+高度数组

首先我们发现,其实找一块块矩阵时,很多时候我们都要重复的寻找一些单元格,来确保我们可以找到最大的矩阵面积。 所以我们可以使用动态规划,来帮助我们记录之前查找过的矩阵信息。我们定义height[i]代表当前行的第j列往上数,数字为1的矩阵高度。然后我们开始一行行遍历,在第i行时,我们要从第j列开始往前查找j-1一直到0,每次的高度取这一路的最小值,然后不断更新最大值。

单调栈

我可以参考关于Leetcode-84.柱状图中最大的矩形。首先我们仍然计算出每一行的高度数组,然后遍历每一行,像上面这个文章一样,看成计算柱状图中的最大矩阵即可。

三、实现代码

只写了暴力枚举的,单调栈方法的代码和上个题差不多,偷个懒。

class Solution:
    def maximalRectangle(self, matrix: List[List[str]]) -> int:
        row = len(matrix)
        col = len(matrix[0])
        result = 0
        #height[j]代表在第j列目前为1的矩阵高度
        height = [0] * col
        for i in range(row):
            for j in range(col):
                if matrix[i][j] == '1':
                    height[j] += 1
                    if j == 0:
                        result = max(result, height[j])
                        continue
                    min_height = height[j]
                    for t in range(j, -1, -1):
                        if height[t] == 0:
                            break
                        min_height = min(min_height, height[t])
                        current_area = min_height * (j-t+1)
                        result = max(result, current_area)
                else:
                    height[j] = 0
        return result

相关文章:

  • 【数据集】ACM数据集
  • Python Cookbook-2.20 在 Python 的搜索路径中寻找文件
  • Leetcode-柱状图中最大的矩形(单调栈)
  • 进程信号
  • 大模型在白血病诊疗全流程风险预测与方案制定中的应用研究
  • 【AIGC系列】4:Stable Diffusion应用实践和代码分析
  • 大语言模型中的 Token:它们是什么,如何工作?
  • 如何调试Linux内核?
  • 【Java】I/O 流篇 —— 打印流与压缩流
  • 无人系统:未来科技的智能化代表
  • 有关数据库表的冗余字段
  • 塔能科技:工厂智慧照明,从底层科技实现照明系统的智能化控制
  • Python 项目安全实战:工具应用、规范制定、数据防护与架构加固
  • 【自学笔记】Oracle基础知识点总览-持续更新
  • AcWing--866.试除法判定质数
  • Linux:进程地址空间的奥秘
  • leetcode 108. 将有序数组转换为二叉搜索树
  • 在Ubuntu下,源码编译安装Python
  • SQL server配置ODBC数据源(本地和服务器)
  • Python 科学计算生态入门 1 - 基础环境与管理
  • 老网站绑定新网站如何做/站内优化包括哪些
  • 上海网站建设的企/磁力岛引擎
  • 婚姻介绍交友网站怎么建设/免费制作永久个人网站
  • 冠县网站开发/免费做网页的网站
  • 怎么做网站内容调研/培训机构哪家最好
  • 网站测试域名301怎么做/企业所得税优惠政策