LeetCode开心刷题三十二天——85. Maximal Rectangle
Posted marigolci
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode开心刷题三十二天——85. Maximal Rectangle相关的知识,希望对你有一定的参考价值。
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的主要内容,如果未能解决你的问题,请参考以下文章