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

给定一个整型矩阵map,求最大的矩形区域为1的数量

题目:

给定一个整型矩阵map,其中的值只有01两种,求其中全是1的 所有矩形区域中,最大的矩形区域为1的数量。

例如:

1 1 1 0

其中,最大的矩形区域有31,所以返回3

再如:

1 0 1 1

1 1 1 1

1 1 1 0

其中,最大的矩形区域有61,所以返回6

解题思路:

如果矩阵的大小为O(N×M),本题可以做到时间复杂度为O(N×M)。 解法的具体过程为:

1.矩阵的行数为N,以每一行做切割,统计以当前行作为底的情况 下,每个位置往上的1的数量。使用高度数组height来表示。

例如:

map = 1 0 1 1

1 1 1 1

1 1 1 0

以第1行做切割后,height={1011}height[j]表示目前的底上 (第1行),j位置往上(包括j位置)有多少连续的1

以第2行做切割后,height={2122},注意到从第一行到第二 行,height数组的更新是十分方便的,即height[j] = map[i][j]==0 ? 0 : height[j]+1

以第3行做切割后,height={3230}

2.对于每一次切割,都利用更新后的height数组来求出以每一行为 底的情况下,最大的矩形是什么。那么这么多次切割中,最大的那个矩 形就是我们要的。

整个过程就是如下代码中的maxRecSize方法。步骤2的实现是如下代码中的maxRecFromBottom方法。

下面重点介绍一下步骤2如何快速地实现,这也是这道题最重要的部分,如果height数组的长度为M,那么求解步骤2的过程可以做到时间 复杂度为O(M)

对于height数组,读者可以理解为一个直方图,比如{3

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

相关文章:

  • SRS WebRTC 入门
  • 【大模型】Query 改写常见Prompt 模板
  • 第27篇:SELinux安全增强机制深度解析与OpenEuler实践指南
  • uni-app项目实战笔记26--uniapp实现富文本展示
  • 【Actix Web 精要】Rust Web 服务开发核心技术与实战指南
  • [Java 基础]算法
  • 【AI实践】Mac一天熟悉AI模型智能体应用(百炼版)
  • nginx基本使用 linux(mac下的)
  • 【HarmonyOS Next之旅】DevEco Studio使用指南(三十八) -> 构建HAR
  • 编译安装交叉工具链 riscv-gnu-toolchain
  • RabbitMQ-基础篇
  • FreeSWITCH配置文件解析(2) dialplan 拨号计划中xml 的action解析
  • 1.1 基于Icarus Verilog、ModelSim和Vivado对蜂鸟E203处理器进行仿真
  • 学习使用dotnet-dump工具分析.net内存转储文件(2)
  • YOLOv5 训练中参数优化方案
  • 测量 Linux 中进程上下文切换需要的时间
  • UniApp Vue3 模式下实现页面跳转的全面指南
  • 【C++】简单学——内存管理
  • 【数论】P11169 「CMOI R1」Bismuth / Linear Sieve|普及+
  • OpenAI:Let’s Verify Step by Step 解读
  • 告别固定密钥!在单一账户下用 Cognito 实现 AWS CLI 的 MFA 单点登录
  • 数据结构1 ——数据结构的基本概念+一点点算法
  • SpringMVC系列(六)(Restful架构风格(中))
  • 太速科技-670-3U VPX PCIe桥扩展3路M.2高速存储模块
  • 矩阵的条件数(Condition Number of a Matrix)
  • 分布式电源采集控制装置:江苏光伏电站的“智能调度中枢
  • 【云桌面容器KasmVNC】如何关闭SSL使用HTTP
  • pytest 中的重试机制
  • 【Linux】理解进程状态与优先级:操作系统中的调度原理
  • 鸿蒙5:布局组件