题:
思:
没思路,直接看了答案,感觉和dp没什么关系
需要一个辅助数组letf,left[i][j]用来存放第i行第j列时,第i行前面有几个连续的1
然后判断最大矩形时,比如以第i行第j列为右下角的矩形,其最大矩形面积为多个a*b的比较
a为长,b为宽
b初始为1,每次++
a = Math.min(leftMatrix[k][j], a);
码:
public int maximalRectangle(char[][] matrix) {
if (matrix.length == 0 || matrix[0].length == 0) return 0;
int x = matrix.length;
int y = matrix[0].length;
int max = Integer.MIN_VALUE;
int leftMatrix[][] = new int[x][y];
for (int i = 0; i < x; i++) {
int count = 0;
for (int j = 0; j < y; j++) {
if (matrix[i][j] == '1') {
count++;
leftMatrix[i][j] = count;
} else {
count = 0;
leftMatrix[i][j] = 0;
}
}
}
// int dp[][] = new int[x][y];
for (int i = 0; i < x; i++) {
for (int j = 0; j < y; j++) {
// a*b,b=height,a=min(leftMatrix[k][j]) , 0 <= k <= i
int a = Integer.MAX_VALUE, b = 0;
for (int k = i; k >= 0; k--) {
a = Math.min(leftMatrix[k][j], a);
b++;
if (a * b > max) max = a * b;
}
}
}
return max;
}