题目描述:
给定一个仅包含 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; } };