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

【算法奥义】最大矩形问题

首先建立一个二维数组,这个二维数组,计算出矩阵的每个元素的左边连续 1 的数量,使用二维数组 left记录,其中left[i][j] 为矩阵第 i 行第 j 列元素的左边连续 1 的数量。

也就是从这个元素开始,从右往左边数有多少个连续为1,那么这个元素就是多少。

整理出该数组后,需要再次进行遍历,找出此行之前的行中,也就是left[i-1][j]的长度,然后只有选出最小的,才能与后面的行组成矩形,继续遍历之前的每次选出最小width,就可以了。

在这里插入图片描述

下面展示 cpp代码

class Solution {
public:int maximalRectangle(vector<vector<char>>& matrix) {int m = matrix.size();if (m == 0) {return 0;}int n = matrix[0].size();vector<vector<int>> left(m, vector<int>(n, 0));for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {if (matrix[i][j] == '1') {left[i][j] = (j == 0 ? 0: left[i][j - 1]) + 1;}}}int ret = 0;for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {if (matrix[i][j] == '0') {continue;}int width = left[i][j];int area = width;for (int k = i - 1; k >= 0; k--) {width = min(width, left[k][j]);area = max(area, (i - k + 1) * width);}ret = max(ret, area);}}return ret;}
};
http://www.lryc.cn/news/152353.html

相关文章:

  • 06 Kafka线上集群部署方案
  • flex-shrink计算题
  • Springboot - 5.Bean的生命周期
  • 华为云 sfs 服务浅谈
  • CSS中如何实现元素的渐变背景(Gradient Background)效果?
  • buildroot修改内核防止清理重新加载办法
  • Vue框架--Vue中的事件
  • 1921. 消灭怪物的最大数量
  • 创建一个空的vue项目,配置及步骤
  • 一篇文章教会你如何编写一个简单的Shell脚本
  • SSM框架-spring
  • 聊一下C#中的lock
  • 学会Mybatis框架:让你的开发事半功倍【五.Mybatis关系映射】
  • 《TCP/IP网络编程》阅读笔记--基于Windows实现Hello Word服务器端和客户端
  • Java-Optional类
  • AJAX学习笔记1发送Get请求
  • Elasticsearch 高级搜索技巧和最佳实践
  • 解决 .csv 文件上传到 pgsql 的字符报错问题
  • linux自动挂载并添加用户权限
  • 【C++】学习STL中的stack和queue
  • Java捕获异常
  • 【LLM】快速开始 LangChain
  • Unity中立体声平移的应用
  • jupyter常用的方法以及快捷键
  • SQL Server 操作JSON数据库列
  • 拼多多开放平台的API接口可以获取拼多多电商数据。以下是API接口流程
  • 使用Docker安装和部署kkFileView
  • 胆囊结石3mm严重吗(解析胆囊结石的危害和处理方法)
  • 全新UI站长在线工具箱系统源码带后台开源版
  • maven的依赖下载不下来的几种解决方法