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)时间内就可以求出每一行形成的“柱状图”的最大矩形面积了

class Solution {
public:
    int maximalRectangle(vector<vector<char> > &matrix) {
        int nRow = matrix.size();
        if (nRow == 0) return 0;
        int nCol = matrix.at(0).size();
        std::vector<int> tmp(nCol, 0);
        int result = 0;
        for (int i = 0; i < nRow; ++i) {   // 计算每一行可以形成的最大矩形面积
            for (int j = 0; j < nCol; ++j) {
                if (matrix.at(i).at(j) == ‘0‘) {
                    tmp.at(j) = 0;
                } else {
                    tmp.at(j)++;         // 计算当前行的当前列的累积高度(1的个数)
                }
            }
            int area = largestRectangleArea(tmp);
            result = std::max(result, area);
        }
        return result;
    }

    // 最大矩形面积
    int largestRectangleArea(std::vector<int>& height) {
        if (height.size() == 0) return 0;
        height.push_back(-1);
        std::stack<int> stk;
        int result = 0;
        for (int i = 0; i < height.size(); ) {
            if (stk.empty() || height.at(i) > height.at(stk.top())) {
                stk.push(i);
                ++i;
            } else {
                int idx = stk.top();
                stk.pop();
                int area = height.at(idx) * (stk.empty() ? i : i - stk.top() - 1);
                result = std::max(result, area);
            }
        }
        return result;
    }
};
时间: 2024-10-24 11:48:59

Leetcode:Maximal Rectangle 最大全1子矩阵的相关文章

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(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

(每日算法)Leetcode --- Maximal Rectangle(最大子矩阵)

求在0-1矩阵中找出面积最大的全1矩阵 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 这道题,假设我们把矩阵沿着某一行切下来,然后把切的行作为底面,将自底面往上

[leetcode]Maximal Rectangle @ Python [图解] [很难]

原题地址:https://oj.leetcode.com/problems/largest-rectangle-in-histogram/ 题意: Given n non-negative integers representing the histogram's bar height where the width of each bar is 1, find the area of largest rectangle in the histogram. Above is a histogra

[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. 此题是之前那道的Largest Rectangle in Histogram 直方图中最大的矩形 的扩展,这道题的二维矩阵每一层向上都可以看做一个直方图,输入矩阵有多少行,就可以形成多少个直方图,对每个直方图都调用Largest Rectangle in Hist

【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