Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing all ones and return its area.
思路:同[leetcode 84] Largest Rectangle in Histogram
class Solution {
public:
int maximalRectangle(vector<vector<char> > &matrix) {
const int m = matrix.size();
if (m < 1) {
return 0;
}
const int n = matrix[0].size();
vector<vector<int> > intmatrix(m, vector<int>(n,0));
for (int i = 0; i < m; i++) {
for (int j = 0; j <n; j++) {
if (matrix[i][j] == '1') {
intmatrix[i][j] = 1;
}
}
}
for (int i = 1; i < m; i++) {
for (int j = 0; j < n; j++) {
if (intmatrix[i][j]>0) {
intmatrix[i][j] += intmatrix[i-1][j];
}
}
}
int res = 0;
for (int i = 0; i < m; i++) {
res = max(res, maxHis(intmatrix[i]));
}
return res;
}
int maxHis(vector<int> matrix) {
int res = 0;
matrix.push_back(0);
int n = matrix.size();
stack<int> p;
for (int i = 0; i < n; ) {
if (p.empty() || matrix[i] > matrix[p.top()]) {
p.push(i++);
} else {
int tmp = p.top();
p.pop();
res = max(res, matrix[tmp]*(p.empty()?i:i-p.top()-1));
}
}
return res;
}
};