当前位置: 首页 > 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.lqws.cn/news/558307.html

相关文章:

  • Insar 相位展开真实的数据集的生成与下载(随机矩阵放大,zernike 仿真包裹相位)
  • Launcher3中的CellLayout 和ShortcutAndWidgetContainer 的联系和各自职责
  • 剑指offer50_0到n-1中缺失的数字
  • python -日期与天数的转换
  • autoas/as 工程的RTE静态消息总线实现与端口数据交换机制详解
  • 解决flash-attn安装报错的问题
  • 【C】陷波滤波器
  • 鸿蒙开发:资讯项目实战之底部导航封装
  • MySQL之MVCC实现原理深度解析
  • 类和对象(中)
  • springboot+Vue驾校管理系统
  • 开疆智能ModbusTCP转CClinkIE网关连接台达DVP-ES3 PLC配置案例
  • Java-正则表达式
  • 测量 Linux 中进程上下文切换需要的时间
  • cocos creator 3.8 - 精品源码 - 挪车超人(挪车消消乐)
  • 同步日志系统深度解析【链式调用】【宏定义】【固定缓冲区】【线程局部存储】【RAII】
  • 蚂蚁百宝箱体验:如何快速创建“旅游小助手”AI智能体
  • LINUX628 NFS 多web;主从dns;ntp;samba
  • AlphaGenome:基因组学领域的人工智能革命
  • Linux离线搭建Redis (centos7)详细操作步骤
  • 深入解析 Electron 核心模块:构建跨平台桌面应用的关键
  • 《Go语言高级编程》玩转RPC
  • Vue.js 中的 v-model 和 :value:理解父子组件的数据绑定
  • 网络 : 传输层【UDP协议】
  • (线性代数)矩阵的奇异值Singular Value
  • WPS之PPT镂空效果实现
  • 笔记07:网表的输出与导入
  • spring中maven缺少包如何重新加载,报错java: 程序包org.springframework.web.reactive.function不存在
  • FPGA产品
  • 深入理解Java四大引用:强引用、软引用、弱引用与虚引用