关于最大某某问题,使用DP思想来求解,在最大子问题系列中有较为详细的解答。
Maximal Rectangle
Given a 2D binary matrix filled with 0’s and 1’s,
find the largest rectangle containing all ones and return its area.
(实在不能理解为什么要用char)
class Solution {
public:
int maximalRectangle(vector<vector<char>>& matrix) {
int H = matrix.size(); if(H <= 0) return 0;
int W = matrix[0].size(); if(W <= 0) return 0;
int left[H][W]; int i, j, k, MaxArea = 0, area = 0;
for(i = 0; i < H; ++i)
for(j = 0; j < W; ++j)
left[i][j] = (matrix[i][j] == '0' ? 0 : (j == 0 ? 0 : left[i][j-1]) + 1);
for(i = 0; i < H; ++i){
for(j = 0; j < W; ++j){
if(left[i][j] == 0) continue;
for(k = i-1, area = left[i][j]; k >= 0 && left[k][j] >= left[i][j]; --k, area += left[i][j]);
for(k = i+1; k < H && left[k][j] >= left[i][j]; ++k, area += left[i][j]);
MaxArea = max(MaxArea, area);
}
}
return MaxArea;
}
};