本文始发于个人公众号:TechFlow,原创不易,求个关注
今天是LeetCode专题53篇文章,我们一起来看看LeetCode中的85题,Maximal Rectangle(最大面积矩形)。
今天的这道题目和上一篇文章讲的Largest Rectangle in Histogram这题有一定的相似,所以如果没有看过上一篇文章的同学,建议先移步观看一下上一篇。
85题的官方难度是Hard,点赞2757,反对69,通过率37.2%左右。它的情况和84题非常相似,点赞比很高,然后通过率也差不多。虽然它是84题的变形题,但是整体的题目质量还是很高的,没有因为这一点被诟病。那么和84题相比,究竟它的变动在哪里呢,让我们一起来看题目吧。
题意
给定一个只包含0和1的数字矩阵,要求在这个矩阵当中找到一个由1组成的最大面积的矩形,返回这个面积。
我们来看个样例:
Input:
[
["1","0","1","0","0"],
["1","0","1","1","1"],
["1","1","1","1","1"],
["1","0","0","1","0"]
]
Output: 6
答案是6,是这一块1围成的矩形:

题解
还是老规矩,我们从最简单的方法入手,一点点推导出最佳的思路。
暴力
首先最简单的当然是暴力,这题让我们寻找一个矩形,直接寻找矩形是有点麻烦的。计算机程序不像人眼,可以直接获取到图形相关的信息,计算机不行,只能获得单个位置的信息。所以我们让程序直接判断矩形是不现实的,但我们可以通过特征点来锁定矩形,这个也是业内常用的套路。
锁定一个矩形的方法一般有两种,第一种是用矩形的中心点和长宽来确定。这一种在各种图像识别和目标检测算法当中经常用到,模型预测的结果就是图像中心点的坐标以及长宽的长度。

第二种方法可以通过矩形的对角线上的两个点来确定,这种方法只适用于和坐标轴平行的矩形。比如下图当中,无论我们知道了(x2, y2), (x3, y3)还是(x1, y1), (x4, y4),我们都可以将这个矩形确定下来。

有了确定矩形的方法之后,我们通过暴力法来求解就简单了。我们通过这些值来枚举所有可能构成的矩形,然后依次遍历矩形中的每一个元素,来判断它们是否全是1,如果是否的话,那么就排除,否则则用来更新答案。
这种方法固然可行,但是估算一下,差不多应该是 O ( N 6 ) O(

本文介绍了LeetCode第85题《最大面积矩形》的解题思路,从暴力解法到利用单调栈优化。通过将矩阵中连续的1视为矩形高度,转换问题为寻找最大面积。文章详细讲解了如何用单调栈找到每个高度的左右边界,从而计算最大面积,降低时间复杂度。
最低0.47元/天 解锁文章

521

被折叠的 条评论
为什么被折叠?



