Maximal Rectangle (求矩阵的最大的子矩阵) 【面试算法leetcode】

题目:

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

题意有一个01组成的矩阵,找到其中面积最大的,全部由1构成的子矩阵。

去年做多校比赛的时候第一次见到这题,不优化到O(n×n)死活过不了当时。

优化就是先预处理成保存成,当前点向上都是1的最高的高度,就变成每一行都是一个直方图,

之后用O(n)的直方图求最大面积去算,之前一篇文章 http://blog.csdn.net/havenoidea/article/details/11854723 介绍过这个步骤,就不细说。


int height[1000][1000];
class Solution {
public:
    int maximalRectangle(vector > &matrix) {
       
        int i,j,k,row,col,maxx=0;
        row=matrix.size();
        if(row==0)return 0;
        col=matrix[0].size();
        if(col==0)return 0;           
        for(j=0;js;
        for(i=0;iheight[i][j])
                    {
                        int ph=s.top();
                        s.pop();
                        if(!s.empty())
                            maxx=max(maxx,(j-s.top()-1)*height[i][ph]);
                        else 
                            maxx=max(maxx,j*height[i][ph]);                    
                    }  
                    s.push(j);
                }
            }
            while(!s.empty())
            {
                int ph=s.top();
                s.pop();
                if(!s.empty())
                     maxx=max(maxx,(col-s.top()-1)*height[i][ph]);
                else 
                     maxx=max(maxx,col*height[i][ph]);  
                
            }
        }
        return maxx;
    }
};




你可能感兴趣的:(leetcode面试算法题,leetcode题解,面试算法)