题目:
Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing all ones and return its area.
class Solution {
public:
int maximalRectangle(vector<vector<char> > &matrix) {
int m = matrix.size();
if (m == 0)
return 0;
int n = matrix[0].size();
//f[i][j]表示第i行从j位置开始连续1的个数,复杂度O(n^2)
vector<vector<int> > f(m, vector<int>(n, 0));
for (int i = 0; i < m; i++) {
f[i][n - 1] = matrix[i][n - 1] == '1' ? 1 : 0;
for (int j = n - 2; j >= 0; j--) {
f[i][j] = matrix[i][j] == '1' ? f[i][j + 1] + 1 : 0;
}
}
int ans = 0;
//复杂度O(n^3)
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
int len = f[i][j];
for (int high = 1; high <= m-i; high++) {
len = min(f[i + high -1][j], len);
if (len == 0)
break;
else
ans = max(ans, len * high);
}
}
}
return ans;
}
};
4万+

被折叠的 条评论
为什么被折叠?



