给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。
示例:
输入:
[
["1","0","1","0","0"],
["1","0","1","1","1"],
["1","1","1","1","1"],
["1","0","0","1","0"]
]
输出: 6
思路:写了一个O(n^3)的写法,前缀和瞎搞搞
class Solution {
public int maximalRectangle(char[][] matrix) {
if(matrix.length==0)
return 0;
int ans=0;
int[][] sum=new int[matrix.length][matrix[0].length];
for(int i=0;i<matrix.length;i++)
{
sum[i][0]=matrix[i][0]-'0';
for(int j=1;j<matrix[0].length;j++)
{
if(matrix[i][j]=='0')
sum[i][j]=0;
else
sum[i][j]=sum[i][j-1]+1;
}
}
for(int i=0;i<matrix.length;i++)
for(int j=0;j<matrix[0].length;j++)
{
int tmp=Integer.MAX_VALUE;
for(int h=i;h<matrix.length;h++)
{
tmp=Math.min(tmp, sum[h][j]);
ans=Math.max(ans, tmp*(h-i+1));
}
}
return ans;
}
}