Chinaunix首页 | 论坛 | 博客
  • 博客访问: 270040
  • 博文数量: 170
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1709
  • 用 户 组: 普通用户
  • 注册时间: 2014-05-06 18:01
文章分类

全部博文(170)

文章存档

2016年(11)

2015年(130)

2014年(29)

分类: Java

2015-09-19 10:48:46

import java.util.Stack;


public class MaximalRectangle {


public static void main(String[] args) {
// TODO Auto-generated method stub


}
public int maximalRectangle(char[][] matrix) {
   int m=matrix.length;
   if(m==0)
    return 0;
   int n=matrix[0].length;
   if(n==0)
    return 0;
   int[][] dp=new int[m][n+1];
   for(int i=0;i<n;i++){
    if(matrix[0][i]=='1')
    dp[0][i]=1;
   }
   for(int j=0;j<n;++j){
    for(int i=1;i<m;++i){
    if(matrix[i][j]=='1')
    dp[i][j]=dp[i-1][j]+1;
    }
   }
   int maxarea=0;
   for(int i=0;i<m;++i){
    int temp=largestRectangleArea(dp[i]);
     if(temp > maxarea)  
               maxarea = temp; 
   }
   return maxarea;
}
int largestRectangleArea(int height[]) {  
       Stack<Integer> stk=new Stack<Integer>();  
       int i = 0;  
       int maxArea = 0;  
       while(i < height.length){  
           if(stk.empty() || height[stk.peek()] <= height[i]){  
               stk.push(i++);  
           }else {  
               int t = stk.peek();  
               stk.pop();  
               int area = height[t] * (stk.empty() ? i : i - stk.peek() - 1);  
               maxArea = maxArea > area ? maxArea : area;  
           }  
       }  
       return maxArea;  
   }  
}

阅读(289) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~