description
给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。
demonstration
输入:
[
["1","0","1","0","0"],
["1","0","1","1","1"],
["1","1","1","1","1"],
["1","0","0","1","0"]
]
输出: 6
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximal-rectangle
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution {
public:
int maximalRectangle(vector<vector<char>>& matrix) {
int x = matrix.size();
if (x == 0)
return 0;
int y = matrix[0].size();
int dp[x][y];
int maxarea = 0;
memset(dp, 0, sizeof(dp));
for (int i = 0; i < x; ++i) {
for (int j = 0; j < y; ++j) {
if (matrix[i][j] == '1') {
dp[i][j] = j == 0? 1 : dp[i][j-1] + 1;
int witdh = dp[i][j];
for (int k = i; k >= 0; --k) {
witdh = min(witdh, dp[k][j]);
maxarea = max(maxarea, witdh * (i - k + 1));
}
}
}
}
return maxarea;
}
};
要点:
witdh = min(witdh, dp[k][j]);
此处取最小值,能保证进行面积计算时可使用的最大宽度