85. 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.

Example:

Input:
[
  ["1","0","1","0","0"],
  ["1","0","1","1","1"],
  ["1","1","1","1","1"],
  ["1","0","0","1","0"]
]
Output: 6

class Solution {
public:
	int maximalRectangle(vector<vector<char>>& matrix) {
      if(matrix.size()==0) return 0 ;        
		int  leni = matrix.size();
		int  lenj = matrix[0].size();
		vector<int> vec(lenj, 0);
		int maxSize = 0;
		for (int i = 0; i < leni; ++i)
		{
			for (int j = 0; j < lenj; ++j)
			{
				if (matrix[i][j] == '0')  vec[j] = 0;
				else
				{
					vec[j] += 1;
				}
			}
			int temp = largestRectangleArea(vec);
			if (maxSize < temp)
				maxSize = temp;
		}
		return maxSize;
	}


	int largestRectangleArea(vector<int>& heights)
	{
		int area = 0;
		for (int i = 0; i < heights.size(); ++i)
		{
			for (int k = i + 1; k < heights.size(); k++)
			{
				if (heights[k] < heights[k - 1])
				{
					i = k - 1;
					break;
				}
				else
				{
					i = k;
				}
			}
			int lowest = heights[i];
			for (int j = i; j >= 0; j--)
			{
				if (heights[j] < lowest)
					lowest = heights[j];
				int currArrea = (i - j + 1) * lowest;
				if (currArrea > area) area = currArrea;
			}
		}
		return area;
	}
};

猜你喜欢

转载自blog.csdn.net/qq_34609108/article/details/80281549