85. 最大矩形

给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。

示例:

输入:
[
  ["1","0","1","0","0"],
  ["1","0","1","1","1"],
  ["1","1","1","1","1"],
  ["1","0","0","1","0"]
]
输出: 6

思路:

每一行计算高度,转换成 84. 柱状图中最大的矩形的问题。实现代码如下所示。

class Solution {
public:
    int rows,cols;
    int maximalRectangle(vector<vector<char>>& matrix) {
        if(!matrix.size() || !matrix[0].size())
        {
            return 0;
        }
        int res=0;
        rows=matrix.size();
        cols=matrix[0].size();
        vector<vector<int>> heights;
        heights=vector<vector<int>>(rows,vector<int>(cols,0));
        for(int i=0;i<rows;i++)
        {
            for(int j=0;j<cols;j++)
            {
                if(matrix[i][j]=='1')
                {
                    heights[i][j]=i==0?1:(heights[i-1][j]+1);
                } 
            }
            res=max(res,largestRectangleArea(heights[i]));
        }
        return res;
    }
    int largestRectangleArea(vector<int> heights)
    {
        stack<int> st;
        int res=0;
        heights.push_back(0);
        for(int i=0;i<heights.size();i++)
        {
            if(st.empty() || heights[st.top()]<heights[i])
            {
                st.push(i);
            }
            else
            {
                int curr=st.top();
                st.pop();
                res=max(res,heights[curr]*(st.empty()?i:i-1-st.top()));
                i--;
            }
        }
        return res;
    }
};
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。 示例: 代码
    vbuer阅读 2,944评论 0 0
  • B树的定义 一棵m阶的B树满足下列条件: 树中每个结点至多有m个孩子。 除根结点和叶子结点外,其它每个结点至少有m...
    文档随手记阅读 14,585评论 0 25
  • 线性代数在科学领域有很多应用的场景,如下: 矩阵,是线性代数中涉及的内容, 线性代数是用来描述状态和变化的,而矩阵...
    zhoulujun阅读 14,229评论 3 44
  • 1 前言 OpenGL渲染3D模型离不开空间几何的数学理论知识,而本篇文章的目的就是对空间几何进行简单的介绍,并对...
    RichardJieChen阅读 12,062评论 1 11
  • 总有些是不能丢掉的,比如画画。每个阶段画出来的都不一样,用画记录生活,爱生活,爱画画! 变小的太阳️ 漂亮的太阳 ...
    ninalaj阅读 1,027评论 0 1