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的个数。

    public int maximalRectangle(char[][] matrix) {
        int lenX = matrix.length;
        if (lenX == 0) {
            return 0;
        }
        int lenY = matrix[0].length;
        int[][] maxRec = new int[lenX][lenY];
        int[][] height = new int[lenX][lenY];
        int[][] length = new int[lenX][lenY];
        for (int i = 0; i < lenX; i++) {
        	for (int j = 0; j < lenY; j++) {
        		if (matrix[i][j] == '1') {
        			if (j == 0) {
        				length[i][j] = 1;
        			} else {
        				length[i][j] = length[i][j - 1] + 1;
        			}

        			if (i == 0) {
        				height[i][j] = 1;
        			} else {
        				height[i][j] = height[i - 1][j] + 1;
        			}
        		} else {
        			length[i][j] = 0;
        			height[i][j] = 0;
        		}
        	}
        }

        for (int i = 0; i < lenX; i++) {
            for (int j = 0; j < lenY; j++) {
            	int h = height[i][j];
            	int l = length[i][j];
            	int minHeight = h;
            	int max = 0;
            	for (int k = 1; k <= l; k++) {
            		minHeight = Math.min(minHeight, height[i][j + 1 - k]);
            		max = Math.max(max, k * minHeight);
            	}
            	maxRec[i][j] = max;
            }
        }
        int max = 0;
        for (int i = 0; i < lenX; i++) {
            for (int j = 0; j < lenY; j++) {
                if (maxRec[i][j] > max) {
                    max = maxRec[i][j];
                }
            }
        }
        return max;
    }

Maximal Rectangle,布布扣,bubuko.com

时间: 2024-10-13 03:16:29

Maximal Rectangle的相关文章

LeetCode: Maximal Rectangle

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. 地址:https://oj.leetcode.com/problems/maximal-rectangle/ 算法:要解决这道题,得利用Largest Rectangle in Histogram这道题的解法

LeetCode: Maximal Rectangle [085]

[题目] Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing all ones and return its area. [题意] 给定一个由0和1填充的二维矩阵,找一个全是1的最大矩形 [思路] 扫描二维矩阵,凡是扫到值为1的块时候,以当前块为矩形的左上角区块拓展,找最大矩阵. 先找出以每个"1"区块为左上角区块的最大矩形,然后求出最大全局的最大矩形. 以下图为

Leetcode:Maximal Rectangle 最大全1子矩阵

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. 解题分析: 联想到 最大矩形面积 这一题,可以在O(n)时间内求出 最大的矩形面积 如果我们把每一行看成x坐标,那高度就是从那一行开始往上数的1的个数. 利用 最大矩形面积 的方法,在O(n2)时间内就可以求出每一行形成的“柱状

【leetcode】Maximal Rectangle

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. 使用dpHeight[]数组来记录到第i行为止,第j个位置垂直连续包含多少个1(包括matrxi[i][j]).如: 1 0 1 1 0 1 1 0 1 0 0 1 1 1 1 有如下结果: 第1行: dpHeight[] =

【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. 题解,很巧妙的一道题,对于一个0-1矩阵,它的每一行及以上都可以看作一个直方图(如下图所示),利用Largest Rectangle in Histogram的方法,可以在O(n)的时间搜索出这一行及以上的直方图中面积最大的矩形,对矩阵的每一行依次做这个操作,就可

Maximal Rectangle leetcode java

题目: Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing all ones and return its area. 题解: 这道题可以应用之前解过的Largetst Rectangle in Histogram一题辅助解决.解决方法是: 按照每一行计算列中有1的个数,作为高度,当遇见0时,这一列高度就为0.然后对每一行计算 Largetst Rectangle in H

[LeetCode] Maximal Rectangle(good)

Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing all ones and return its area. 参考“Largest Rectangle in Histogram”这个题的解法,思想差不多一样,只是用h向量表示Rectangle中此元素中第一行到本行的高度,非常妙的算法: class Solution { public: int maximalRectang

LeetCode: Maximal Rectangle 解题报告

Maximal RectangleGiven a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing all ones and return its area. Show TagsHave you met this question in a real interview? Yes  NoDiscussSOLUTION 1: 1 public class Solution { 2 publ

最大的矩形面积 Maximal Rectangle

2018-09-15 10:23:44 一.Largest Rectangle in Histogram 在求解最大的矩形面积之前,我们先讨论一条最大直方图面积的问题. 问题描述: 问题求解: 解法一.朴素解法,O(n ^ 2). 解决的思路就是遍历一遍,如果当前的数比后一个数要小,那么当前的额数字肯定不可能是最大面积的右边界,遍历下一个数: 如果当前数比后一个大,那么假设当前的为右边界,向左进行遍历,计算面积最大值. public int largestRectangleArea(int[]