Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing all ones and return its area.
public class Solution { public int maximalRectangle(char[][] matrix) { //利用上题的思路,先求出每一列的连续1个数,保存在DP二维数组中,然后对每一行进行findRectangle if(matrix.length<1) return 0; int row=matrix.length; int col=matrix[0].length; int dp[][]=new int[row][col]; int res=0; for(int i=0;i<row;i++){ for(int j=0;j<col;j++){ if(i==0){ dp[i][j]=matrix[i][j]-'0'; }else{ if(matrix[i][j]=='1') dp[i][j]=dp[i-1][j]+1; } } } for(int i=0;i<row;i++){ int temp= findRectangle(dp[i]); res=Math.max(temp,res); } return res; } public int findRectangle(int [] height){ Stack<Integer> stack=new Stack<Integer>(); height=Arrays.copyOf(height,height.length+1); //if(height.length==0) return 0; //if(height.length==1) return height[0]; height[height.length-1]=0; int res=0; int i=0; while(i<height.length){ if(stack.empty()||height[i]>=height[stack.peek()])stack.push(i++); else{ int temp=stack.pop(); res=Math.max(res,height[temp]*(stack.empty()?i:(i-stack.peek()-1))); } } return res; } }