【算法奥义】最大矩形问题

这篇具有很好参考价值的文章主要介绍了【算法奥义】最大矩形问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

首先建立一个二维数组,这个二维数组,计算出矩阵的每个元素的左边连续 1 的数量,使用二维数组 left记录,其中left[i][j] 为矩阵第 i 行第 j 列元素的左边连续 1 的数量。

也就是从这个元素开始,从右往左边数有多少个连续为1,那么这个元素就是多少。

整理出该数组后,需要再次进行遍历,找出此行之前的行中,也就是left[i-1][j]的长度,然后只有选出最小的,才能与后面的行组成矩形,继续遍历之前的每次选出最小width,就可以了。

【算法奥义】最大矩形问题,c++,算法

下面展示 cpp代码文章来源地址https://www.toymoban.com/news/detail-692389.html

class Solution {
public:
    int maximalRectangle(vector<vector<char>>& matrix) {
        int m = matrix.size();
        if (m == 0) {
            return 0;
        }
        int n = matrix[0].size();
        vector<vector<int>> left(m, vector<int>(n, 0));

        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (matrix[i][j] == '1') {
                    left[i][j] = (j == 0 ? 0: left[i][j - 1]) + 1;
                }
            }
        }

        int ret = 0;
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (matrix[i][j] == '0') {
                    continue;
                }
                int width = left[i][j];
                int area = width;
                for (int k = i - 1; k >= 0; k--) {
                    width = min(width, left[k][j]);
                    area = max(area, (i - k + 1) * width);
                }
                ret = max(ret, area);
            }
        }
        return ret;
    }
};

到了这里,关于【算法奥义】最大矩形问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 算法修炼Day60|● 84.柱状图中最大的矩形

     LeetCode:84.柱状图中最大的矩形 84. 柱状图中最大的矩形 - 力扣(LeetCode) 1.思路 双指针思路,以当前数组为中心,借助两个数组存放当前数柱左右两侧小于当前数柱高度的索引,进行h*w的计算。注意首尾节点的左侧索引和右侧索引需要单独声名为0. 单调栈,在原数组的基础上

    2024年02月11日
    浏览(10)
  • 算法leetcode|84. 柱状图中最大的矩形(rust重拳出击)

    算法leetcode|84. 柱状图中最大的矩形(rust重拳出击)

    给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。 1 = heights.length =10 5 0 = heights[i] = 10 4 面对这道算法题目,二当家的再次陷入了沉思。 眼睛一看似乎有思路,但是一动手就容易不知

    2024年02月08日
    浏览(15)
  • 吃透单调栈(2)——解两道Hard题:接雨水、柱状图中最大的矩形问题

    吃透单调栈(2)——解两道Hard题:接雨水、柱状图中最大的矩形问题

    这类题目的数据通常是一维数组,要寻找任一个元素的 右边或者左边 第一个 比自己 大 或者 小 的元素的位置(寻找 边界 ) ,此时我们就要想到可以用单调栈了。   这道题就是要求解每一个柱子左边第一个比它高的柱子,以及右边第一个比它高的柱子,然后这两个柱子间

    2024年02月10日
    浏览(7)
  • 【leetcode热题100】接雨水、直方图最大矩形面积、矩阵中最大的矩形

    【leetcode热题100】接雨水、直方图最大矩形面积、矩阵中最大的矩形

    题目链接 题目描述: 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入:height = [0,1,0,2,1,0,1,3,2,1,2,1] 输出:6 解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝

    2024年02月03日
    浏览(8)
  • 【LeetCode】85.最大矩形

    【LeetCode】85.最大矩形

    给定一个仅包含  0  和  1  、大小为  rows x cols  的二维二进制矩阵,找出只包含  1  的最大矩形,并返回其面积。 示例 1: 示例 2: 示例 3: 示例 4: 示例 5: 提示: rows == matrix.length cols == matrix[0].length 1 = row, cols = 200 matrix[i][j]  为  \\\'0\\\'  或  \\\'1\\\' 这题是建立在「84.柱形图

    2024年02月10日
    浏览(11)
  • Leetcode 85. 最大矩形

    Leetcode 85. 最大矩形

    LeetoCode地址: 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 该题是84题的升级版。84题给出了一个一维数组,即一行数据,每个元素是高度。而该题则是给出了二维数组,只需我们将每一行的高度自行求出,即可以运用相同的算法解决。 该题目的难点在于思维模型上,如

    2024年02月20日
    浏览(10)
  • ● 84.柱状图中最大的矩形

     84.柱状图中最大的矩形

    2024年02月11日
    浏览(8)
  • 前缀和之最大加权矩形

    P1719 最大加权矩形 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 二位前缀和的思路,我们使用二维前缀和来预处理,只有开四个for循环来枚举矩形的左起点和右下方的点。来求,时间复杂度达到10的8次方维230 毫秒 我们首先来看一n*1的矩形来求最大加权矩形,不难发现这就是求

    2024年02月07日
    浏览(11)
  • LeetCode 84. 柱状图中最大的矩形

    LeetCode 84. 柱状图中最大的矩形

    84. 柱状图中最大的矩形 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。 示例 1: 输入: heights = [2,1,5,6,2,3] 输出: 10 解释: 最大的矩形为图中红色区域,面积为 10 示例 2: 输入

    2024年02月03日
    浏览(13)
  • LeetCode - #85 最大矩形(Top 100)

    LeetCode - #85 最大矩形(Top 100)

    本题为 LeetCode 前 100 高频题 本题由于没有合适答案为以往遗留问题,最近有时间将以往遗留问题一一完善。 我们社区陆续会将顾毅( Netflix 增长黑客,《iOS 面试之道》作者,ACE 职业健身教练。 )的 Swift 算法题题解整理为文字版以方便大家学习与阅读。 LeetCode 算法到目前我

    2024年02月10日
    浏览(10)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包