85. 最大矩形:
题目链接 :85. 最大矩形
题目:给定一个仅包含 0 和 1 、大小为 rows x cols 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。
思路:
1、把每列看成一个矩阵的高,对每列进行高度累加,每行为一个周期。
2、 每列中后续元素中只要出现0,整行归零。
AC代码:
class Solution {
public int maximalRectangle(char[][] matrix) {
// //矩阵为空
if (matrix == null || matrix.length == 0) return 0;
int row=matrix.length;
int col=matrix[0].length;
int[] ans=new int[col+2];
int area=0;
//把每列看成一个矩阵的高,对每列进行高度累加,每行为一个周期
for(int i=0;i<row;i++)
{
Deque<Integer> dq=new ArrayDeque<>();
for(int j=0;j<ans.length;j++)
{
if(j>=1&&j<=col)
{
//每列中后续元素中只要出现0,整行归零
if(matrix[i][j-1]=='1')
{
ans[j]+=1;
}else{
ans[j]=0;
}
}
while(!dq.isEmpty()&&ans[j]<ans[dq.peek()])
{
int pop=dq.pop();
area=Math.max(area,(j-dq.peek()-1)*ans[pop]);
}
dq.push(j);
}
}
return area;
}
}