您的位置:首页 > 其它

LeetCode - Maximal Rectangle

2016-01-03 17:21 232 查看
题目:

Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing all ones and return its area.

思路:

类似于上一篇文章中的方法一,对每列的左右拓展极限进行记录,同时保存当前列的高度。

package area;

public class MaximalRectangle {

public int maximalRectangle(char[][] matrix) {
int m;
int n;
if (matrix == null || (m = matrix.length) == 0 || (n = matrix[0].length) == 0) return 0;
// Height of this column
int[] H = new int
;
int[] L = new int
;
int[] R = new int
;
for (int i = 0; i < n; ++i) {
H[i] = 0;
L[i] = 0;
R[i] = n;
}
int max = 0;
for (int i = 0; i < m; ++i) {
int left = 0;
int right = n;
for (int j = 0; j < n; ++j) {
if (matrix[i][j] == '1') {
++H[j];
L[j] = Math.max(L[j], left);
} else {
left = j + 1;
H[j] = 0;
L[j] = 0;
R[j] = n;
}
}

for (int j = n - 1; j >= 0; --j) {
if (matrix[i][j] == '1') {
R[j] = Math.min(R[j], right);
max = Math.max((R[j] - L[j]) * H[j], max);
} else {
right = j;
}
}
}
return max;
}

public static void main(String[] args) {
// TODO Auto-generated method stub
char[][] matrix = { { '0', '1', '1', '0', '1' },
{ '1', '1', '0', '1', '0' }, { '0', '1', '1', '1', '0' },
{ '1', '1', '1', '1', '0' }, { '1', '1', '1', '1', '1' },
{ '0', '0', '0', '0', '0' } };
MaximalRectangle m = new MaximalRectangle();
System.out.println(m.maximalRectangle(matrix));
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: