LeetCode 85. 最大矩形(DP/单调递增栈,难)

文章目录

    • 1. 题目
    • 2. 解题
      • 2.1 DP
      • 2.2 单调递增栈

1. 题目

给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。

示例:
输入:
[["1","0","1","0","0"],["1","0","1","1","1"],["1","1","1","1","1"],["1","0","0","1","0"]
]
输出: 6

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/maximal-rectangle
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

类似题目:
LeetCode 221. 最大正方形(DP)
LeetCode 84. 柱状图中最大的矩形(单调递增栈)

2.1 DP

参考官方的解题思路:

class Solution {
public:int maximalRectangle(vector<vector<char>>& mat) {if(mat.empty())return 0;int i, j, minL, maxR, maxarea = 0;int r = mat.size(), c = mat[0].size();vector<vector<int>> left(r,vector<int>(c,0));vector<vector<int>> right(r,vector<int>(c,c));vector<vector<int>> height(r,vector<int>(c,0));for(i = 0; i < r; i++) {//填写left,相连的1,先到最高,然后最左侧的下标minL = 0;for(j = 1; j < c; j++){if(i == 0)//第一行{if(mat[i][j] == '1'){if(mat[i][j-1] == '0')minL = j;//左边0,当前1,需要更新最左边的边界minLleft[i][j] = minL;}}else//剩余行{if(mat[i][j] == '1'){if(mat[i][j-1] == '0')minL = j;left[i][j] = max(minL,left[i-1][j]);//跟上面的行,比较,取大}}}maxR = c;for(j = c-2; j >= 0; j--){if(i == 0)//第一行{if(mat[i][j] == '1'){if(mat[i][j+1] == '0')maxR = j+1;//右边0,当前1,更新最右边的边界maxRright[i][j] = maxR;}}else//其余{if(mat[i][j] == '1'){if(mat[i][j+1] == '0')maxR = j+1;right[i][j] = min(maxR,right[i-1][j]);//还要更上面的比较,取小}}}for(j = 0; j < c; j++){if(i == 0)//第一行{if(mat[i][j] == '1')height[i][j] = 1;}else//剩余{if(mat[i][j] == '1')height[i][j] = 1+height[i-1][j];}}for(j = 0; j < c; j++)maxarea = max(maxarea, (right[i][j]-left[i][j])*height[i][j]);}return maxarea;//返回最大面积}
};

例子的求解过程如下:
数组

  ["1","0","1","0","0"],["1","0","1","1","1"],["1","1","1","1","1"],["1","0","0","1","0"]

left

  [0  0  2  0  0][0  0  2  2  2][0  0  2  2  2][0  0  0  3  0]

right

  [1  5  3  5  5][1  5  3  5  5][1  5  3  5  5][1  5  5  4  5]

height

  [1  0  1  0  0][2  0  2  1  1][3  1  3  2  2][4  0  0  3  0]

area

  [1  0  1  0  0][2  0  2  3  3][3  5  3  6  6][4  0  0  3  0]

在这里插入图片描述

2.2 单调递增栈

  • 思路跟84题一致,行数变多了而已
class Solution {
public:int maximalRectangle(vector<vector<char>>& mat) {if(mat.empty())return 0;int i, j, hi, width, maxarea = 0, m = mat.size(), n = mat[0].size();vector<int> h(n+1, 0);for(i = 0; i < m; ++i){stack<int> s;mat[i].push_back('0');//请看84题for(j = 0; j <= n; ++j){h[j] = mat[i][j]=='1' ? h[j]+1 : 0;//根据前一行,得到当前行的高while(!s.empty() && h[s.top()] > h[j]){hi = h[s.top()];s.pop();width = s.empty() ? j : j-s.top()-1;maxarea = max(maxarea, hi*width);}s.push(j);}}return maxarea;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/477424.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图谱实战 | 故障知识图谱技术落地探索:装备制造故障知识图谱构建及其应用案例剖析总结...

故障知识图谱是当前面向装备制造领域的落地重要探索领域&#xff0c;如何通过对设备的运行状态、运行日志进行信息抽取、关系建模&#xff0c;建成可供分析应用的知识库&#xff0c;并支撑故障诊断、维修辅助等应用场景&#xff0c;具有重要意义。鉴于当前还未有系统性的开源相…

聊聊Spring Cloud版本的那些事儿

继续昨天说的计划&#xff0c;解惑一下收到比较多的问题。 有朋友问“为什么在很多文章中&#xff0c;大家引用的Spring版本名字都不一样呢&#xff1f;比如&#xff1a;Angel.SR6&#xff0c;Brixton.SR5等等&#xff0c;它们都有什么区别呢&#xff1f;”&#xff0c;今天我…

小样本学习只是一场学术界自嗨吗

文 | ALme知乎这两年看见很多人&#xff0c;包括我实习的mentor在内&#xff0c;都在批评few-shot learning&#xff0c;觉得是学术界在自high&#xff0c;思考良久&#xff0c;感觉有必要给这个领域正个名&#xff5e;(注意&#xff0c;此答案仅关注few-shot image classifica…

Spring Cloud构建微服务架构(六)高可用服务注册中心

近期因工作原因减缓了更新频率&#xff0c;同时为了把Spring Cloud中文社区搭建起来也费了不少时间&#xff0c;几乎每天都在挤牙膏般的凑时间出来做一些有意义的事。未能按原计划更新博文&#xff0c;在此对持续关注我博客的朋友们深表歉意。 之前在写Spring Cloud系列文章的…

技术动态 | 「可解释知识图谱推理」最新方法综述

转载公众号 | 专知近年来&#xff0c;以深度学习模型为基础的人工智能研究不断取得突破性进展&#xff0c;但其大多具有黑盒性&#xff0c;不 利于人类认知推理过程&#xff0c;导致高性能的复杂算法、模型及系统普遍缺乏决策的透明度和可解释性。在国 防、医疗、网络与信息安全…

ACL'22 | 陈丹琦提出CoFi模型剪枝,加速10倍,精度几乎无损

文 | jxyxiangyu我们都知道&#xff0c;为了让以深度神经网络为基础的模型更快地训练&#xff0c;人们提出了单机多卡、多机多卡等分布式训练的方式&#xff0c;那么&#xff0c;在模型预测推理阶段&#xff0c;有什么方法可以加速推理呢&#xff1f;遗憾的是&#xff0c;并行/…

LeetCode 第 19 场双周赛(231 / 1120,前20.6%)

文章目录1. 比赛结果2. 题目LeetCode 5311. 将数字变成 0 的操作次数 easyLeetCode 5312. 大小为 K 且平均值大于等于阈值的子数组数目 mediumLeetCode 5313. 时钟指针的夹角 mediumLeetCode 5314. 跳跃游戏 IV hard1. 比赛结果 做出来了1, 3, 4题&#xff0c;第2题结束后12分…

【Spring Cloud中文社区】正式启动

前段时间&#xff0c;开了个关于Spring Cloud的交流群&#xff0c;短短两周时间就聚集了一批爱好者与实践者&#xff0c;每天在交流群中大家都进行着各种不同深度的探讨&#xff0c;但是这些高质量的聊天记录无法被搜索引擎收纳&#xff0c;导致很多不错的研究内容无法分享给网…

图谱实战 | 无本体约束的开放知识图谱构建:以OpenIE为代表的开放信息抽取项目技术方案解读...

目前&#xff0c;本体一直是知识图谱落地过程中的容易受到抨击的点&#xff0c;很多非专业用户对图谱的需求&#xff0c;其实并不想花费大量的时间去做本体约束&#xff0c;而是想直接拿来就用&#xff0c;开箱即用&#xff0c;以达到搜索与分析等目的。对本体的强专业性门槛&a…

计算机视觉,凉了?

计算机视觉是人工智能的关键领域之一&#xff0c;是一门研究如何使机器“看”的科学。近年来&#xff0c;尽管计算机视觉技术在学术上取得了长足的进步&#xff0c;但由于缺少“现金牛”应用&#xff0c;经常在网络上出现“计算机视觉凉凉了”的言论。其实这种观点是非常片面的…

LeetCode 1346. 检查整数及其两倍数是否存在(哈希)

1. 题目 给你一个整数数组 arr&#xff0c;请你检查是否存在两个整数 N 和 M&#xff0c;满足 N 是 M 的两倍&#xff08;即&#xff0c;N 2 * M&#xff09;。 更正式地&#xff0c;检查是否存在两个下标 i 和 j 满足&#xff1a; i ! j0 < i, j < arr.lengtharr[i]…

微服务架构的基础框架选择:Spring Cloud还是Dubbo?

最近一段时间不论互联网还是传统行业&#xff0c;凡是涉及信息技术范畴的圈子几乎都在讨论微服务架构。近期也看到各大技术社区开始组织一些沙龙和论坛来分享Spring Cloud的相关实施经验&#xff0c;这对于最近正在整理Spring Cloud相关套件内容与实例应用的我而言&#xff0c;…

自监督学习效果差?Meta AI 提出 Q-score 快速过滤错误样本!

文 | jxyxiangyu自监督学习指的是不依靠人工标注数据&#xff0c;直接从数据中学习到有用的特征表示。自监督学习中所采用的监督信息可以是“是否属于同一实例样本”的二分类标签&#xff08;对比学习&#xff09;&#xff0c;也可以是一段连续的自然语言文本的下一个词&#x…

LeetCode 1347. 制造字母异位词的最小步骤数

1. 题目 给你两个长度相等的字符串 s 和 t。每一个步骤中&#xff0c;你可以选择将 t 中的 任一字符 替换为 另一个字符。 返回使 t 成为 s 的字母异位词的最小步骤数。 字母异位词 指字母相同&#xff0c;但排列不同的字符串。 示例 1&#xff1a; 输出&#xff1a;s &qu…

图谱实战 | 为什么我们需要医学知识图谱?

转载公众号 | OMAHA联盟 人工智能正在变得司空见惯。在医疗领域&#xff0c;医生也越来越重视人工智能所带来的疾病诊断效率和治疗价值的提升。要实现医疗人工智能&#xff0c;需要构建医学知识图谱以满足医疗领域对知识的应用需求。◆ ◆ ◆知识图谱是什么&#xff1f;知识图…

Spring Cloud构建微服务架构(三)断路器

在微服务架构中&#xff0c;我们将系统拆分成了一个个的服务单元&#xff0c;各单元间通过服务注册与订阅的方式互相依赖。由于每个单元都在不同的进程中运行&#xff0c;依赖通过远程调用的方式执行&#xff0c;这样就有可能因为网络原因或是依赖服务自身问题出现调用故障或延…

测试集涨点猛如虎,推上线无收益?算法新手翻车原因盘点!

文 | 杨旭东知乎在推荐算法领域&#xff0c;时常会出现模型离线评测效果好&#xff0c;比如AUC、准召等指标大涨&#xff0c;但上线后业务指标效果不佳&#xff0c;甚至下降的情况&#xff0c;比如线上CTR或CVR下跌。本文尝试列举一些常见的原因&#xff0c;为大家排查问题提供…

LeetCode 1348. 推文计数(哈希map+set)

1. 题目 请你实现一个能够支持以下两种方法的推文计数类 TweetCounts&#xff1a; recordTweet(string tweetName, int time) 记录推文发布情况&#xff1a;用户 tweetName 在 time&#xff08;以 秒 为单位&#xff09;时刻发布了一条推文。 getTweetCountsPerFrequency(s…

Spring Cloud构建微服务架构(二)服务消费者

在上一篇《Spring Cloud构建微服务架构&#xff08;一&#xff09;服务注册与发现》中&#xff0c;我们已经成功创建了“服务注册中心”&#xff0c;实现并注册了一个“服务提供者&#xff1a;COMPUTE-SERVICE”。那么我们要如何去消费服务提供者的接口内容呢&#xff1f; Rib…

2202年了,继续大比拼ViT、MLP、CNN结构有意义吗??

文 | 卖萌菌近日&#xff0c;MSRA发布了一篇题为《Transformer不比CNN强 Local Attention和动态Depth-wise卷积前世今生》的博文&#xff0c;再次谈论了这个老生常谈的话题。文中提到&#xff0c;Depth-wise CNN 和 attention 存在高度相似的结构&#xff0c;调参优化之后&…