[leetcode] Maximal Rectangle

Maximal Rectangle

class Solution {
public:
    int maximalRectangle(vector<vector<char> > &matrix) {
        if(matrix.empty()){
            return 0;
        }
        const int m=matrix.size();
        const int n=matrix[0].size();
        
        vector<int> H(n,0);
        vector<int> L(n,0);
        vector<int> R(n,n);
        
        int res=0;
        for(int i=0;i<m;i++){
            int left=0,right=n;
            for(int j=0;j<n;j++){
                if(matrix[i][j]=='1'){
                    H[j]++;
                    L[j]=max(L[j],left);//保证是一个矩形(左边界)
                }else{
                    left=j+1;
                    H[j]=0;
                    L[j]=0;
                    R[j]=n;
                }
            }
            for(int j=n-1;j>=0;j--){
                if(matrix[i][j]=='1'){
                    R[j]=min(R[j],right);//保证是一个矩形(右边界)
                    res=max(res,H[j]*(R[j]-L[j]));
                }else{
                    right=j;
                }
            }
        }
        return res;
    }
};


你可能感兴趣的:([leetcode] Maximal Rectangle)