给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。
示例:
输入: [ ["1","0","1","0","0"], ["1","0","1","1","1"], ["1","1","1","1","1"], ["1","0","0","1","0"] ] 输出: 6
class Solution {
public:
int maximalRectangle(vector<vector<char>>& matrix) {
int m = matrix.size();
if (m == 0)
return 0;
int n = matrix[0].size();
if (n == 0)
return 0;
vector<int> height(n, 0), left(n, 0), right(n, n - 1);
int cur_left, cur_right, max_area = 0;
for (int i = 0; i < m; ++i)
{
for (int j = 0; j < n; ++j)
height[j] = (matrix[i][j] == '1') ? height[j] + 1 : 0;
cur_left = 0;
for (int j = 0; j < n; ++j)
{
if (matrix[i][j] == '1')
left[j] = max(left[j], cur_left);
else
{
left[j] = 0;
cur_left = j + 1;
}
}
cur_right = n - 1;
for (int j = n - 1; j >= 0; --j)
{
if (matrix[i][j] == '1')
right[j] = min(right[j], cur_right);
else
{
right[j] = n - 1;
cur_right = j - 1;
}
}
for (int j = 0; j < n; ++j)
max_area = max(max_area, height[j] * (right[j] - left[j] + 1));
}
return max_area;
}
};