zoukankan      html  css  js  c++  java
  • [leedcode 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.

    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;
        }
    }
  • 相关阅读:
    Hibernate----面试题
    Java框架部分---面试题
    面试题---多线程
    swap分区
    Linux之格式化与挂载
    Linux下的GPT分区
    Linux下的MBR分区
    vim基础初步
    管道符,通配符以及其他特殊符号
    shell基础之脚本执行,命令别名以及快捷键等
  • 原文地址:https://www.cnblogs.com/qiaomu/p/4649498.html
Copyright © 2011-2022 走看看