leetcode Maximal Rectangle

Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing only 1's and return its area.

For example, given the following matrix:

1 0 1 0 0
1 0 1 1 1
1 1 1 1 1
1 0 0 1 0

Return 6.

此题应该与前一道题“Largest Rectangle in Histogram”连起来看,这也是leetcode上两道题挨着的原因

看这个矩阵,是不是就像前一道题求最大矩阵面积。

代码如下,一看即懂:

class Solution {
public:
    int maximalRectangle(vector >& matrix) {
        int row = matrix.size();
        int col = matrix[0].size();
        if(row == 0 || col == 0)
        	return 0;
        vector >area(row, vector(col, 0));
        int i, j, max = 0, tmp;
        for(j=0; j max)
        		max = tmp;
        }
        return max;
    }
    int largestRectangleArea(vector &height) {//前一道题“Largest Rectangle in Histogram”的代码
            if(height.empty())
            	return 0;
            height.push_back(0);
            stack s;
            int len = height.size() ,tmp;
            int leftarea, rightarea, max = 0;
            for(int i=0; i height[i])
            	{
            		tmp = s.top();
            		s.pop();
            		if(s.empty())
            			leftarea = (tmp+1)*height[tmp];
            		else
            			leftarea = (tmp-s.top())*height[tmp];
            		rightarea = (i-tmp-1)*height[tmp];
            		if(leftarea + rightarea > max)
            			max = leftarea + rightarea;
            	}
            	s.push(i);
            }
            return max;
        }
};


你可能感兴趣的:(算法)