一、题目
给定一个仅包含 0
和 1
、大小为 rows x cols
的二维二进制矩阵,找出只包含 1
的最大矩形,并返回其面积。
点击查看原题
难度级别:困难
二、思路
1)记录竖向连续1数量
定义一个数组cnt[col]
,代表遍历到当前matrix
中row
行col
列,matrix
中从当前位置竖直向上计数,连续为‘1’
的计数。
当且仅当cnt
从i
到j(j<=i)
不存在0
时,构成矩形,记录下cnt[i,j]
的最小值minHigh
,则矩形的面积为minHigh*(i-j+1)
三、代码
1)记录竖向连续1数量
class Solution {
public int maximalRectangle(char[][] matrix) {
if (matrix == null || matrix.length == 0) {
return 0;
}
int[] cnt = new int[matrix[0].length];
int ans = 0;
for (int row = 0; row < matrix.length; row++) {
for (int col = 0; col < matrix[0].length; col++) {
if (matrix[row][col] == '1') {
cnt[col]++;
int minHigh = cnt[col];
for (int i = col; i >= 0 && cnt[i] != 0; i--) {
minHigh = Math.min(minHigh, cnt[i]);
ans = Math.max(ans, minHigh * (col - i + 1));
}
} else {
cnt[col] = 0;
}
}
}
return ans;
}
}
时间复杂度为O(m*n*n)
,空间复杂度为O(n)