Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing only 1's and return its area.
For example, given the following matrix:
1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0Return 6.
====================================================================================================================================
这道题目的大意是:求出只有0和1的矩阵中最全为1的矩形最大面积。
由于做过leetcode中的84题:Largest Rectangle in Histogram ,把这个问题转化成84题就能求解了。
class Solution {
public:
int maximalRectangle(vector<vector<char>>& matrix) {
int n = matrix.size() ;
if ( ! n ) return 0 ;
int m = matrix[0].size() , ans = 0 ;
vector < vector <int> > height ( n , vector <int> (m) ) ;
for ( int i = 0 ; i < n ; i ++ )
{
for ( int j = 0 ; j < m ; j ++ )
{
if ( matrix[i][j] == '1' )
height[i][j] = i == 0 ? 1 : height[i-1][j] + 1 ;
else
height[i][j] = 0 ;
}
}
for ( int i = 0 ; i < n ; i ++ )
{
ans = max ( ans , largestRectangleArea ( height[i] ) ) ;
}
return ans ;
}
int largestRectangleArea(vector<int>& heights) {
heights.push_back ( 0 ) ;
vector <int> hs ;
int i = 0 , ans = 0 ;
while ( i < heights.size() )
{
if ( hs.empty() || heights[i] > heights[hs.back()] )
{
hs.push_back ( i ++ ) ;
}
else
{
int j = hs.back () ;
hs.pop_back () ;
ans = max ( ans , heights[j] * ( hs.empty() ? i : i - hs.back() - 1 ) ) ;
}
}
return ans ;
}
};