leetcode[85]Maximal Rectangle
Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing all ones and return its area.
class Solution { public: int largestRectangleArea(vector<int> &height) { if(height.empty())return 0; height.push_back(0); int maxRes=0; stack<int> sta; for (int i=0;i<height.size();i++) { int top; int newRes; while(!sta.empty()&&height[i]<height[sta.top()]) { top=sta.top(); sta.pop(); newRes=(sta.empty()?i:(i-sta.top()-1))*height[top]; maxRes=maxRes>newRes?maxRes:newRes; } sta.push(i); } return maxRes; } int maximalRectangle(vector<vector<char> > &matrix) { if(matrix.empty())return 0; int m=matrix.size(); if(matrix[0].empty())return 0; int n=matrix[0].size(); int maximal=0; vector<vector<int>> d(m,vector<int> (n)); for(int i=0;i<m;i++) { for(int j=0;j<n;j++) { if(i==0)d[i][j]=matrix[i][j]-'0'; else { if(matrix[i][j]=='1') { d[i][j]=d[i-1][j]+matrix[i][j]-'0'; } else { d[i][j]=matrix[i][j]-'0'; } } } int tmp=largestRectangleArea(d[i]); maximal=maximal>tmp?maximal:tmp; } return maximal; } };