当前位置: 首页 > 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] * colfor i in range(row):for j in range(col):if matrix[i][j] == '1':height[j] += 1if j == 0:result = max(result, height[j])continuemin_height = height[j]for t in range(j, -1, -1):if height[t] == 0:breakmin_height = min(min_height, height[t])current_area = min_height * (j-t+1)result = max(result, current_area)else:height[j] = 0return result

http://www.lryc.cn/news/544766.html

相关文章:

  • 域内委派维权
  • leetcode---LCR 140.训练计划
  • Linux基础 -- ARM 32位常用机器码(指令)整理
  • 内存中的缓存区
  • 基于 Spring Boot 的 +Vue“宠物咖啡馆平台” 系统的设计与实现
  • LeetCode 解题思路 7(Hot 100)
  • linux-Dockerfile及docker-compose.yml相关字段用途
  • deepseek部署:ELK + Filebeat + Zookeeper + Kafka
  • 微软Office 2016-2024 x86直装版 v16.0.18324 32位
  • CMake宏定义管理:如何优雅处理第三方库的宏冲突
  • 【SpringCloud】Gateway
  • Maven入门教程
  • 大数据与金融科技:革新金融行业的动力引擎
  • Autosar RTE配置-Port Update配置及使用-基于ETAS工具
  • 【AVRCP】深入理解蓝牙音频 / 视频远程控制规范:从基础到应用
  • AWS SQS跨账户访问失败排查指南
  • 算法训练(leetcode)二刷第三十八天 | 1143. 最长公共子序列、1035. 不相交的线、53. 最大子数组和、392. 判断子序列
  • 【JavaWeb学习Day20】
  • 2024年12月中国电子学会青少年软件编程(Python)等级考试试卷(二级)真题 + 答案
  • 一、对iic类模块分析与使用
  • ROS 2机器人开发--CMakeLists.txt 文件详解
  • kan与小波,和不知所云的画图
  • 使用DeepSeek实现自动化编程:类的自动生成
  • 算法题:快速排序
  • Python的那些事第三十六篇:基于 Vega 和 Vega-Lite 的数据可视化解决方案,Altair 声明式可视化库
  • aws(学习笔记第三十课) 练习使用transit gateway
  • Phpstudy中的MySQL无法正常启动或启动后自动暂停,以及sqlilab环境搭建出现的问题解决方法
  • 【Android】安卓付款密码输入框、支付密码输入框
  • Python异常处理:从入门到精通的实用指南
  • 【AVL树】—— 我与C++的不解之缘(二十三)