美文网首页
leetcode85 最大矩形

leetcode85 最大矩形

作者: 奥利奥蘸墨水 | 来源:发表于2019-12-29 14:04 被阅读0次

题目

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

示例:

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

分析

动态规划问题,使用一个一维dp数组记录到每一行位置最大连续1的数量。然后对该dp数组使用单调栈解法(leetcode 84题)求解。

代码

class Solution {
public:
    int maximalRectangle(vector<vector<char>>& matrix) {

        if (matrix.empty()){
            return 0;
        }

        int res = 0;
        vector<int> dp(matrix[0].size(), 0);

        for (int i = 0; i < matrix.size(); i++){
            for (int j = 0; j < matrix[0].size(); j++){
                dp[j] = matrix[i][j] == '0' ? 0 : dp[j] + 1;
            }
            res = max(res, largestRectangleArea(dp));
        }

        return res;
    }

        //单调栈解法
    int largestRectangleArea(vector<int>& nums) {
        stack<int> stk;
        stk.push(-1);

        int top, cur, res = 0;

        for (int i = 0; i < nums.size(); i++){
            while (stk.top() != -1 && nums[stk.top()] > nums[i]){
                top = nums[stk.top()];
                stk.pop();

                cur = top * (i - stk.top() - 1);

                res = max(res, cur);
            }
            stk.push(i);
        }

        while (stk.top() != -1){
            top = nums[stk.top()];
            stk.pop();

            cur = top * (nums.size() - stk.top() - 1);

            res = max(res, cur);
        }

        return res;
    }   
};

相关文章

  • leetcode85 最大矩形

    题目 给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。 示例: 输入:[[...

  • 最大矩形

    题目来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/maxi...

  • 0 1矩阵求只包含1的最大矩形

    题目: 给定一个无序矩阵,只包含0 和1 两种元素,求只包含1的最大子矩阵的大小。[leetcode85]http...

  • LeetCode-84-柱状图中最大的矩形

    LeetCode-84-柱状图中最大的矩形 84. 柱状图中最大的矩形[https://leetcode-cn.c...

  • 最大相邻矩形面积

  • 最大矩形: (85号)

  • JavaScript 算法 (最大矩形)

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

  • 栈-最大矩形(85)

    给定一个仅包含0 和 1 、大小为 rows x cols 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其...

  • 85. 最大矩形

    给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。 思路: 每一行计算高度,...

  • 面积最大的矩形

    题目描述:给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。 示例:输入:[...

网友评论

      本文标题:leetcode85 最大矩形

      本文链接:https://www.haomeiwen.com/subject/atpyoctx.html