码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode开心刷题三十二天——85. Maximal Rectangle

时间:2019-08-12 01:05:00      阅读:103      评论:0      收藏:0      [点我收藏+]

标签:attention   ace   procedure   个数   ini   names   stream   main   spec   

85. Maximal Rectangle
Hard

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

Example:

Input:
[
  ["1","0","1","0","0"],
  ["1","0","1","1","1"],
  ["1","1","1","1","1"],
  ["1","0","0","1","0"]
]
Output: 6

IDEA:
ONE IMPORTANT THING:
dp[i][j] means the number of "1" in i rows before j columns.
dp[1][2]代表在第一行中的第二列之前1的个数。
#include<stdio.h>
#include<iostream>
#include<string>
#include<vector>
#include<set>
#include<map>
#include<algorithm>
#include<climits>
using namespace std;
class Solution {
public:
    int maximalRectangle(vector<vector<char>>& matrix) {
        //NULL judge very important
        int n1=matrix.size();
        if(n1==0) return 0;
        int n2=matrix[0].size();
        //dp[i][j] is the max number of 1 in columns j rows i
        //vector initializer special no need ==
        vector<vector<int>> dp(n1,vector<int>(n2));
        //initialization
        for(int i=0;i<n1;i++)
        {
            for(int j=0;j<n2;j++)
            {
                //nested function need to pay attention whether finish all procedure such as this finish one easy to forget the latter ?:
                dp[i][j]=(matrix[i][j]==1)?(j==0?1:dp[i][j-1]+1):0;
            }
        }

        int ans=0;

        for(int i=0;i<n1;i++)
        {
            for(int j=0;j<n2;j++)
            {
                int len = INT_MAX;
                for(int k=i;k<n1;k++)
                {
                    len=min(len,dp[k][j]);
                    if(len==0) break;
                    ans=max((k-i+1)*len,ans);
                }
            }
        }

        return ans;
    }
};

int main()
{
    vector<vector<char>> matrix=
    {
        {1,0,1,0,0},
        {1,0,1,1,1},
        {1,1,1,1,1},
        {1,0,0,1,0}
    };
    Solution s;
    int res=s.maximalRectangle(matrix);
    cout<<res<<endl;
    return 0;
}

 

 

LeetCode开心刷题三十二天——85. Maximal Rectangle

标签:attention   ace   procedure   个数   ini   names   stream   main   spec   

原文地址:https://www.cnblogs.com/Marigolci/p/11337427.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!