问题描述:给定一个填充了 0 和 1 的二进制矩阵,找到最大的只包含 1 的矩形并返回其面积。
方法一:转化为直方图,以每一行产生一个直方图,从被选中行累加“1”的数目,直到遇到0。然后转化为求直方图的最大矩形,用堆栈法o(n),或者中心扩散法o(n^2)求直方图的最大矩形。总复杂度o(n^3)或o(n^4)代码如下:
int maximalRectangle(vector<vector<char> > &matrix) {
if(matrix.size()==0) return 0;
int* hist = new int[matrix[0].size()];
memset(hist, 0, sizeof(int)*matrix[0].size());
int max_ = 0;
for(int i=0; i<matrix.size(); i++){
for(int j=0; j<matrix[0].size(); j++){