首页 > 其他 > 详细

leetcode 85 最大矩形

时间:2020-05-08 13:58:44      阅读:45      评论:0      收藏:0      [点我收藏+]

题目描述:

  给定一个仅包含 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;
    }
};

 

leetcode 85 最大矩形

原文:https://www.cnblogs.com/z1141000271/p/12849457.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!