题目
Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing all ones and return its area.
在元素值为0,1的二维矩阵中求完全由1组成的最大矩形面积。
m*m*n的方法:
通过一个长为n的数组记录当前相应列在扫描的头尾段内的1的个数。
外循环头向后,内循环尾向后。
每次尾向后时扫描新的一行,更新各列的1的个数,
如果该列全为1,则将这一列计入临时面积;否则临时面积归零。
一次扫描完成即可获得最大面积。
代码:
class Solution {
public:
int maximalRectangle(vector<vector<char> > &matrix) {
int m=matrix.size(),n; //数据大小
if(m==0)
return 0;
else
n=matrix[0].size();
int max_area=0,area; //最大面积,临时面积
int *count=new int[n]; //统计每列的1的个数
int i,j,k;
for(i=0;i<m;i++) //扫描,头向后
{
for(k=0;k<n;k++)
count[k]=0;
for(j=i;j<m;j++) //尾向后
{
area=0;
for(k=0;k<n;k++) //扫描一行
{
if(matrix[j][k]=='1') //是'1'时考虑是否可以构成更大的长方形
{
count[k]++;
if(count[k]==j-i+1)
{
area+=count[k];
if(area>max_area)
max_area=area;
}
else
area=0;
}
else
area=0;
}
}
}
delete [] count;
return max_area;
}
};
本文介绍了一种解决二维矩阵中寻找由1组成的最大矩形面积问题的算法。该算法采用了一个长为n的数组来记录当前对应列在扫描过程中的1的数量,通过外循环控制头向后,内循环控制尾向后的扫描方式,实现了一次扫描即可找到最大面积的目标。
4万+

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



