Exemplo n.º 1
0
	int maximalRectangle(vector<vector<bool> > &matrix)
	{
	    int n=matrix.size();
	    if(n==0)
	        return 0;
	    int m=matrix[0].size();
	    int result=0;
	    vector<int> height(m,0);
	    for(int j=0;j<m;++j)
	    {
	        height[j]=matrix[0][j];
	        result=max(result,largestRectangleArea(height));
	    }
	    for(int i=1;i<n;++i)
	    {
	        for(int j=0;j<m;++j)
	        {
	            if(matrix[i][j]==0)
	                height[j]=0;
	            else
	                ++height[j];
	        }
	        result=max(result,largestRectangleArea(height));
	    }
	    return result;
	}
Exemplo n.º 2
0
    int maximalRectangle(vector<vector<char> >& matrix) {
        // 理解错题了,不是求一个矩阵,里面包含了原矩阵所有的1
        // 而是求以 1 组合的矩阵,最大的那个的 area
        //
        // 然后是一种解法超时,这种解法的是这样的生成一个 dp[m][n]
        // 值是当前这一行,以m n 结尾,有多少个连续的 1 了,如果matrix[m][n]==0,dp[m][n]=0
        // 整个扫完之后,再扫,这次是扫 dp,如果 dp[m][n]不是1,往上往下扫,如果同一列还是大于等于它,说明是矩形算高度,求面积
        // 这种算法的问题是大数据超时
        //
        // 怎么办?用Largest Rectangle in Histogram 求解。
        // Largest Rectangle in Histogram  是求一个 non negative arrary 的最大面积,这样想:
        // 生成一个长度是 martrix[0].size() 的 array,每一个value就是这一往上数连续的列的1的个数。
        // 一秒变老题目
        if (matrix.empty()) return 0;
        vector<int> thisRowHeight(matrix[0].size(), 0);
        int max_value = 0;
        for (int i = 0; i < matrix.size(); i++) {
            for (int j = 0; j < matrix[0].size(); j++) {
                if (matrix[i][j] == '1') {
                    thisRowHeight[j] = thisRowHeight[j] + 1;
                } else {
                    thisRowHeight[j] = 0;
                }

            }
            // 这里第一次想半天,写到 for j 里面去了,败笔
            max_value = max(max_value, largestRectangleArea(thisRowHeight));
        }
        return max_value;
    }
Exemplo n.º 3
0
 int maximalRectangle(vector<vector<char> > &matrix) {
     // Start typing your C/C++ solution below
     // DO NOT write int main() function
     if (!matrix.size() || !matrix[0].size()){
         return 0;
     }
     
     int len1 = matrix.size(), len2 = matrix[0].size();
     int result = 0, tmp = 0;
     vector<vector<int> > sum(len1);
     
     for (int i = 0; i != len1; i++){
         sum[i].resize(len2);
         
         for (int j = 0; j != len2; j++){
             if (matrix[i][j] == '0')
                 sum[i][j] = 0;
             else if (!i)
                 sum[i][j] = 1;
             else
                 sum[i][j] = sum[i-1][j] + 1;
         }
         tmp = largestRectangleArea(sum[i]);
         result = max(result, tmp);
     }
     
     return result;
     
 }
 int maximalRectangle(vector<vector<char> > &matrix) {
     int H = matrix.size(), W = H ? matrix[0].size() : 0;
     if (H == 0) return 0;
     
     int max_rect = 0;
     vector<int> hist(W, 0);
     for (int i = 0; i < H; ++i) {
         for (int j = 0; j < W; ++j) {
             hist[j] = matrix[i][j] == '1' ? hist[j] + 1 : 0;
         }
         max_rect = max(max_rect, largestRectangleArea(hist));
     }
     return max_rect;
 }
Exemplo n.º 5
0
 int maximalRectangle(vector<vector<char>>& matrix) {
     int ret = 0;
     int row = matrix.size();
     if (row == 0) return ret;
     int col = matrix[0].size();
     if (col == 0) return ret;
     
     vector<int> dp(col);
     for (int i=0; i<row; i++) {
         for (int j=0; j<col; j++) {
             dp[j] = matrix[i][j] == '1' ? dp[j] + 1 : 0;
         }
         ret = max(ret, largestRectangleArea(dp));
     }
     return ret;
 }
Exemplo n.º 6
0
int maximalRectangle(char** matrix, int matrixRowSize, int matrixColSize) {
    int maxArea = 0;
    if (matrixRowSize == 0 || matrixColSize == 0) return 0;
    int* height = (int*) malloc(matrixColSize * sizeof(int));
    memset(height, 0, matrixColSize * sizeof(int));
    for (int i = 0; i < matrixRowSize; i++) {
        for (int j = 0; j < matrixColSize; j++) {
            if (matrix[i][j] == '1') {
                height[j]++;
            } else if (matrix[i][j] == '0') {
                height[j] = 0;
            }
        }
        int area = largestRectangleArea(height, matrixColSize);
        if (maxArea < area) maxArea = area;
    }
    return maxArea;
}
Exemplo n.º 7
0
 int maximalRectangle(vector<vector<char>>& matrix) {
     if(matrix.empty()||matrix[0].empty())
         return 0;
     int m=matrix.size(),n=matrix[0].size();
     int area=0;
     vector<int>height(n,0);//初始化
     for(int i=0;i<m;i++){
         for(int j=0;j<n;j++){
             if(matrix[i][j]=='0')
                 height[j]=0;
             else
                 height[j]++;
         }
         int tmp=largestRectangleArea(height);
         area=max(area,tmp);
     }
     return area;
 }
Exemplo n.º 8
0
int maximalRectangle(char **matrix, int matrixRowSize, int matrixColSize)
{
	int	h[matrixColSize];
	int	i, j, max, t;

	max = 0;
	memset(h, 0, sizeof(h));
	for (i = 0; i < matrixRowSize; i++) {
		for (j = 0; j < matrixColSize; j++)
			if (matrix[i][j] == '1')
				h[j]++;
			else
				h[j] = 0;
		t = largestRectangleArea(h, matrixColSize);
		if (t > max)
			max = t;
	}
	return(max);
}
int maximalRectangle(vector<vector<char> > &matrix) {

    if (matrix.size()<=0 || matrix[0].size()<=0) return 0;
    int row = matrix.size();
    int col = matrix[0].size();
    vector< vector<int> > heights(row, vector<int>(col));

    int maxArea = 0;
    for(int i=0; i<row; i++){
        for(int j=0; j<col; j++) {
            if (matrix[i][j]=='1'){
                heights[i][j] = (i==0 ? 1 : heights[i-1][j] + 1);
            }
        }
        int area = largestRectangleArea(heights[i]);
        if (area > maxArea) maxArea = area;
    }
    return maxArea;
}
Exemplo n.º 10
0
 // Time: O(n^2)
 // Space: O(n)
 int maximalRectangle(vector<vector<char> > &matrix) {
     int m = matrix.size();
     if (m == 0) {
         return 0;
     }
     int n = matrix[0].size();
     vector<int> height(n, 0);
     int maxRect = 0;
     for (int i = 0; i < m; i++) {
         for (int j = 0; j < n; j++) {
             if (matrix[i][j] == '0') {
                 height[j] = 0;
             } else {
                 height[j]++;
             }
         }
         maxRect = max(maxRect, largestRectangleArea(height));
     }
     return maxRect;
 }
Exemplo n.º 11
0
    int maximalRectangle(vector<vector<char>>& matrix) {
        if(matrix.empty() || matrix[0].empty() )
            return 0;
        int m=matrix.size();
        int n=matrix[0].size();
        int res=0;
        vector<int> first(n,0);
        for(int i=0; i<m; i++)
        {
            for(int j=0; j<n; j++)
            {
                if(matrix[i][j]=='1')
                    first[j]++;
                else
                    first[j]=0;
            }

            res=max(res,largestRectangleArea(first));
        }
        return res;
    }
Exemplo n.º 12
0
int maximalRectangle(char** matrix, int matrixRowSize, int matrixColSize) {
    int *heights;
    int i, j;
    int line_result;
    int max = 0;
    heights = (int*)malloc(matrixColSize * sizeof(int));
    for (i = 0; i < matrixColSize; i++) {
        heights[i] = 0;
    }   
    for (i = 0; i < matrixRowSize; i++) {
        for (j = 0; j < matrixColSize; j++) {
            if ('0' == matrix[i][j]) {
                heights[j] = 0;
            } else {
                heights[j] += 1;
            }
        }
        line_result = largestRectangleArea(heights, matrixColSize);
        if (line_result > max) {
            max = line_result;
        } 
    }
    return max;
}