leetcode——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.

首先,对于每一行,从第一个元素依次遍历,若当前元素为1,则记录包括当前元素开始向前有多少个连续的1的个数;若为0,则记录为0。

其次,按列遍历。对于每一个非0 的记录,从当前这点开始,向上与向下各扫描一次,直到遇到记录小于当前记录的时候停止。同时统计扫描的行数(记为count,初始算作自己为1,count最终为扫描的行数总和,不算小于该记录的行数)。

则针对当前位置所在的最大矩形即为 当前记录*count。

记录下每次得到的矩形,得到最大值。

分析如图:


图1:原始矩阵                

              

图2:记录矩阵


图3:对于2来说,向上2行,向下1行,自己1行,count=4,

因此自己所处位置为终点的矩形面积为8.


遍历之后得到的面积就是最大的面积。

注意:1、在某一点得到的面积,并不是该点所在的最大矩形面积。只能是以该点所在的列为最右一条边的矩形面积。

           2、若想得到最大的那个矩形矩阵,则在每次比较max的时候进行记录就好。

AC代码:

public class Solution {
    public int maximalRectangle(char[][] matrix) {
        if(matrix.length == 0)
            return 0;
        int max = 0;
        int m = matrix.length;
        int n = matrix[m-1].length;

        int[][] metrix = new int[m][n];
        for(int i=0;i=0 && metrix[k][j]>=metrix[i][j];k--,count++);
                for(int k = i+1;k=metrix[i][j];k++,count++);

                if(max


你可能感兴趣的:(leetcode解题报告,leetcode解析,leetcode,java,matrix)