leetcode 85 最大矩形

题目描述:

  给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。

题解:

  类似leetcode 211,定义$dp(i,j)$表示以(i,j)为右下角的矩阵的最大宽(注意这里要求的是矩形)。相较于求解正方形的面积,求解矩形的面积要麻烦一些,这里的宽可以通过$dp$计算出来,但是高度需要依次枚举。枚举的动态图见官方题解。AC代码如下:

  

class Solution {
public:
    int maximalRectangle(vector<vector<char>>& matrix) {
             int n = matrix.size();
        if(n == 0) return 0;
        int m = matrix[0].size();
        int dp[n][m];
        //fill(height,height+n*m,0);
        memset(dp,0,sizeof(dp));
        int ans = INT_MIN;
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)
            {
                if(j == 0) dp[i][j] = matrix[i][j]-'0';
                else
                {
                    if(matrix[i][j] == '0') dp[i][j] = 0;
                    else dp[i][j] = dp[i][j-1] + 1;
                }
                int w = dp[i][j];
                for(int k=i;k>=0;k--)
                {
                    int h = i-k+1;
                    w = min(w,dp[k][j]);
                    ans = max(ans,w*h);
                }
            }
        }

        return ans;
    }
};

 

posted @ 2020-05-08 11:26  猪突猛进!!!  阅读(167)  评论(0编辑  收藏  举报