maximal-rectangle给出一个只包含0和1的二维矩阵,找出最大的全部元素都是1的长方形区域java实现

题目描述

给出一个只包含0和1的二维矩阵,找出最大的全部元素都是1的长方形区域,返回该区域的面积。

思路:结合计算直方图中最大矩形的面积的思路,将在二维矩阵中找出最大的全部元素都是1的长方形区域的问题转换为求每行构成 直方图中最大矩形面积的问题。

每行元素按列累加,遇到连续的1就自增,否则就置0,期间记录最大值,直至遍历到最后一行,输出最大值

import java.util.Stack;
public class Solution {
    public int maximalRectangle(char[][] matrix) {
        if(matrix==null||matrix.length==0||matrix[0].length==0)
            return 0;
        int row=matrix.length;
        int col=matrix[0].length;
        int[] sum=new int[col];
        int res=0;
        for(int i=0;i stack=new Stack();
            stack.push(sum[0]);
            res=Math.max(res,sum[0]);
            for(int j=1;jsum[j]){
                    k++;
                    res=Math.max(res,k*stack.pop());
                }
                for(int m=0;m<=k;m++){
                    res=Math.max(res,sum[j]*(m+1));
                    stack.push(sum[j]);
                }
            }
            int t=1;
            while(!stack.isEmpty()){
                res=Math.max(res,stack.pop()*t);
                t++;
            }
        }
        return res;
    }
}

 

你可能感兴趣的:(LeetCode,笔试题)