继LeetCode 84题
这题延续了84的思想,算是84题的变种吧。
也是一道很经典的单调栈的题,值得反复回味。
85. 最大矩形
给定一个仅包含
0
和1
、大小为rows x cols
的二维二进制矩阵,找出只包含1
的最大矩形,并返回其面积。示例 1:
1
2
3
4 > 输入:matrix = [["1","0","1","0","0"],["1","0","1","1","1"],["1","1","1","1","1"],["1","0","0","1","0"]]
> 输出:6
> 解释:最大矩形如上图所示。
>
示例 2:
1
2
3 > 输入:matrix = []
> 输出:0
>
示例 3:
1
2
3 > 输入:matrix = [["0"]]
> 输出:0
>
示例 4:
1
2
3 > 输入:matrix = [["1"]]
> 输出:1
>
示例 5:
1
2
3 > 输入:matrix = [["0","0"]]
> 输出:0
>
提示:
- rows == matrix.length
- cols == matrix[0].length
- 0 <= row, cols <= 200
- matrix[i][j] 为 ‘0’ 或 ‘1’
思路: 这题的思想和LeetCode 84.柱状图中最大的矩形很类似。
可以把这题转化成第84题,首先我们观察题目中给出的例图。
我们先从第0行开始看,由于它上面没有其他行,保留该行的所有数据。
我们再观察第一行,它上面有第一行,若同一列上有大于0的值,我们把它累加起来,但如果我们现在遍历的元素值本身为0,则不累加,这样就可以转化为下面这个图。其中标红的就是最大的面积值(宽为3, 高为2).
然后每一行都可以看成第84题,相当于我们现在做的这个题是在第84题的基础上,加了一个维度。
然后我们需要求出最大值即可。
1 | class Solution { |