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; } };