LeetCode || Maximal Rectangle

来源:互联网 发布:三菱数控系统编程 编辑:程序博客网 时间:2024/05/16 09:49
class Solution {public:    int maximalRectangle(vector<vector<char>>& matrix) {        int row = matrix.size();        if(row == 0)            return 0;        int col = matrix[0].size();                int i = 0, j = 0;                vector<vector<int>> CountOnes;        CountOnes.resize(row);        for(int i = 0;i<row;i++)            CountOnes[i].resize(col);                //初始化,计算包括matrix[i][j]的连续的1的数量和        for(i = 0;i<row;i++)            for(j = 0;j<col;j++)                CountOnes[i][j] = (matrix[i][j] == '0')?0:((j == 0)?1:(CountOnes[i][j-1]+1));                //update matrix        int maxOnes = 0; //统计1的最大矩阵数量        for(j = 0;j<col;j++)        {                    vector<int> tmp;            tmp.resize(row);            for(i = 0;i<row;i++)            {                if(CountOnes[i][j] == 0)                    continue;                int k = i-1;                int lines = 1;                while(k>=0)                {                    if(CountOnes[k][j]>=CountOnes[i][j])                        lines++;                    else                        break;                    k--;                }                k = i + 1;                while(k <row)                {                    if(CountOnes[k][j]>=CountOnes[i][j])                        lines++;                    else                        break;                    k++;                }                                tmp[i] = lines*CountOnes[i][j];                                if(tmp[i] > maxOnes)                    maxOnes = tmp[i];            }                        for(i = 0;i<row;i++)                CountOnes[i][j] = tmp[i];        }                return maxOnes;            }};

0 0