当前位置: 首页 > 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://ceresin.aaladrg.cn
http://cataclinal.aaladrg.cn
http://archaism.aaladrg.cn
http://americanism.aaladrg.cn
http://baculiform.aaladrg.cn
http://brinkman.aaladrg.cn
http://bema.aaladrg.cn
http://candidate.aaladrg.cn
http://blase.aaladrg.cn
http://chooser.aaladrg.cn
http://bergson.aaladrg.cn
http://arioso.aaladrg.cn
http://alexis.aaladrg.cn
http://actress.aaladrg.cn
http://anilide.aaladrg.cn
http://agouty.aaladrg.cn
http://accelerative.aaladrg.cn
http://arrestor.aaladrg.cn
http://biquadrate.aaladrg.cn
http://brassiere.aaladrg.cn
http://campanologist.aaladrg.cn
http://baseball.aaladrg.cn
http://awestruck.aaladrg.cn
http://anuretic.aaladrg.cn
http://alienage.aaladrg.cn
http://bubbleheaded.aaladrg.cn
http://blondine.aaladrg.cn
http://antibusiness.aaladrg.cn
http://attila.aaladrg.cn
http://canular.aaladrg.cn
http://www.dtcms.com/a/261446.html

相关文章:

  • Redis 高可用分片集群:主从模式与哨兵机制详解
  • 【AI智能体】Dify 核心组件从使用到实战操作详解
  • 33.表复制和去重
  • SpringMVC系列(五)(响应实验以及Restful架构风格(上))
  • maven多模块、多层级项目 如何只构建指定的项目
  • Web基础关键_004_CSS(二)
  • 在 CentOS Stream 10 上搭建 Kubernetes 集群并支持开发调试与日志查看
  • ZooKeeper深度面试指南一
  • React环境搭建及语法简介
  • PIC单片机MPLAB编译报错的一些问题及解决方法
  • python多线程详细讲解
  • Java-Matcher类
  • Grab×亚矩阵云手机:以“云端超级节点”重塑东南亚出行与数字生活生态
  • 【21】C9800配置PSK认证的WLAN
  • 【git教程】git add 命令讲解
  • 如何让ChatGPT模仿人类写作,降低AIGC率?
  • zookeeper Curator(2):Curator的节点操作
  • var let setTimeOut 经典面试题
  • 第十节:Vben Admin 最新 v5.0 (vben5) 快速入门 - 菜单管理(下)
  • 前端与 Spring Boot 后端无感 Token 刷新 - 从原理到全栈实践
  • KS值:风控模型的“风险照妖镜”
  • 投稿爱思唯尔期刊,是什么Manuscript without Author Details,LaTeX文件怎么上传
  • 能否仅用两台服务器实现集群的高可用性??
  • 从用户到权限:解密 AWS IAM Identity Center 的授权之道
  • vue-29(创建 Nuxt.js 项目)
  • StarRocks 向量索引如何让大模型“记性更好”?
  • RK3568-drm框架
  • 软测八股--计算机网络
  • Http请求参数的区别
  • Youtube双塔模型