题目:
给定一个仅包含 0 和 1 、大小为 rows x cols 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。
示例 1:

输入:matrix = [["1","0","1","0","0"],["1","0","1","1","1"],["1","1","1","1","1"],["1","0","0","1","0"]]
输出:6
解释:最大矩形如上图所示。
题解:
import java.util.*;
class Solution {
public int maximalRectangle(char[][] matrix) {
int m = matrix.length;
if (m == 0) {
return 0;
}
int n = matrix[0].length;
int[][] left = new int[m][n];
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 = Math.min(width, left[k][j]);
area = Math.max(area, (i - k + 1) * width);
}
ret = Math.max(ret, area);
}
}
return ret;
}
}
public class Main {
public static void main(String[] args) {
Solution s = new Solution();
char[][] matrix = {{'1','0','1','0','0'},{'1','0','1','1','1'},{'1','1','1','1','1'},{'1','0','0','1','0'}};
int res = s.maximalRectangle(matrix);
System.out.println(res);
}
}
自己的理解:

该博客介绍了如何解决一个算法问题,即在给定的二维二进制矩阵中找到只包含1的最大矩形并计算其面积。提供了一个Java解决方案,通过维护一个left数组来追踪每一列中连续1的个数,然后使用动态规划的方法求解最大矩形的面积。示例展示了对于特定输入矩阵,算法能够正确返回最大矩形的面积。

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



