Maximal Rectangle [leetcode] 的三种思路

用Python给娃编程启蒙?从ICode训练场学到的5个核心概念(含实例代码) 本文分享了如何通过ICode Python训练场为孩子进行编程启蒙,介绍了5个核心概念:顺序执行、函数调用、参数传递、对象操作和协同逻辑。这些概念通过可视化角色和即时反馈,帮助5-12岁孩子轻松理解Python编程基础,培养计算思维。文章包含实例代码和教学技巧,适合家长和编程初学者参考。 阅读详情

第一种方法是利用DP,时间复杂度是 O(m * m * n)

dp(i,j):矩阵中同一行以(i,j)结尾的全部为1的最长子串长度

代码如下:

    int maximalRectangle(vector<vector<char> > &matrix) {
        int m = matrix.size();
        if (m == 0) return 0;
        int n = matrix[0].size();
        if (n == 0) return 0;
        vector<vector<int>> dp(m, vector<int>(n));
        int maxArea = 0;
        for (int i = 0; i < m; i++)
        {
            for (int j = 0; j < n; j++)
            {
                if (matrix[i][j] == '0') continue;
                dp[i][j] = (j == 0 ? 1 : dp[i][j - 1] + 1);
                int minX = dp[i][j];
                for (int k = 1; k <= i + 1; k++)
                {
                    minX = min(minX, dp[i - k + 1][j]);
                    maxArea = max(maxArea, minX * k);
                }
            }
        }
        return maxArea;
    }


第二种方法:

来自https://oj.leetcode.com/discuss/5198/a-o-n-2-solution-based-on-largest-rectangle-in-histogram

其实这里和 Largest Rectangle in Histogram是类似的,

之前的dp(i,j)保存以第i行,第j列结尾的,同一行中连续1的个数;那么这里我们用一个数组x,使x[j]保存当前行第j列中的连续1的个数。之后按行遍历,每一行都按Largest Rectangle in Histogram的算法处理一遍

代码如下:复杂度为O(m*n)

    int maximalRectangle(vector<vector<char> > &matrix) {
        int m = matrix.size();
        if (m == 0) return 0;
        int n = matrix[0].size();
        if (n == 0) return 0;
        vector<int> height(n);
        int maxArea = 0;
        for (int i = 0; i < m; i++)
        {
            vector<int> index;
            for (int j = 0; j < n; j++)
            {
                if (matrix[i][j] == '0') height[j] = 0;
                else height[j] ++;
                while (index.size() && height[j] <= height[index.back()])
                    maxArea = max(getArea(height, index, j), maxArea);
                index.push_back(j);
            }
            while (index.size())
                maxArea = max(getArea(height, index, height.size()), maxArea);
        }
        return maxArea;
    }
    
    int getArea(vector<int> &height, vector<int>& index, int start)
    {
        int areaH = height[index.back()];
        index.pop_back();
        int end = index.empty() ? -1 : index.back();
        return (start - end - 1) * areaH;
    }

第三种方法:

利用极值http://hi.baidu.com/mzry1992/item/030f9740e0475ef7dc0f6cba

H[i][j] = 0                    matrix[i][j] = '0'

            H[i-1][j] + 1     matrix[i][j] = '1'

L[i][j] = max{L[i-1][j], 第i行左边第一个'0'的位置+1}

R[i][j] = min{R[i-1][j], 第i行右边第一个'0'的位置-1}

maxArea = max{maxArea, H[i][j] * (R[i][j] - L[i][j] + 1)}

由于H,L,R均只用到i-1,j的内容,可以将空间进一步压缩成为O(N)的

代码如下:

    int maximalRectangle(vector<vector<char> > &matrix) {
        int m = matrix.size();
        if (m == 0) return 0;
        int n = matrix[0].size();
        if (n == 0) return 0;
        vector<int> h(n);
        vector<int> l(n);
        vector<int> r(n, n - 1);
        int maxArea = 0, maxL = 0, minR = m - 1;
        for (int i = 0; i < m; i++)
        {
            maxL = 0, minR = n-1;
            for (int j = 0; j < n; j++)
            {
                if (matrix[i][j] == '0')
                {
                    h[j] = 0;
                    l[j] = 0;
                    r[j] = n - 1;
                    maxL = j + 1;
                }
                else
                {
                    h[j]++;
                    l[j] = max(l[j], maxL);
                }
            }
            
            for (int j = n - 1; j >= 0; j--)
            {
                if (matrix[i][j] == '0')
                {
                    r[j] = n - 1;
                    minR = j - 1;
                }
                else
                {
                    r[j] = min(r[j], minR);
                    maxArea = max(maxArea, h[j] * (r[j] - l[j] + 1));
                }
            }
        }
        return maxArea;
    }


LeetCode刷题:85. Maximal Rectangle LeetCode刷题:85. Maximal Rectangle 原题链接:https://leetcode.com/problems/maximal-rectangle/ Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing only 1's and return its... 阅读详情

相关推荐

Cadence SKILL 语言实战指南:从函数列表到高效自动化脚本

本文是Cadence SKILL语言实战指南,旨在帮助芯片设计工程师从掌握核心函数列表出发,高效构建自动化脚本。文章详细解析了数据处理、数据库访问、流程控制及错误处理四类关键函数,并通过版图层批量修改与参数化单元生成两大实战场景,演示如何将函数组合成解决实际问题的自动化方案,从而显著提升Virtuoso环境下的工作效率。

beta5的博客 705

刚才看见一段非常巧妙地算法来这里记录一下Maximum Rectangle

例:  0 0 0     0 |-----------| |1 1 1     |1 |1 1 1     |0 |-----------|  0 1 0     0 在一个全是0,1的m * n阶矩阵中,找出包含1最多的子矩阵。 class Solution { public: int maximalRectangle(vector > &matrix) {

00的专栏 1016

保姆级教程:用ComfyUI+LTX-Video插件,5分钟搞定你的第一个AI视频(RTX 4060实测)

本文提供了一份详细的ComfyUI与LTX-Video插件使用指南,帮助用户在RTX 4060显卡上快速生成AI视频。从环境部署到图形化操作,再到提示词优化和性能调优,全面覆盖AI视频生成的各个环节,让零基础用户也能轻松上手。

weixin_33743661的博客 136

Leetcode - Maximum Rectangle

Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing all ones and return its area. [balabala] 这题想到借用Largest Rectangle in Histogram的思路就比较简单了。计算行 i 时,以这行为底,计算每一列对应的...

iteye_17352的博客 232

STM32 FMC驱动AD7606实战:从硬件连接到时序调试全流程解析

本文详细解析了STM32 FMC驱动AD7606的全流程,包括硬件连接、FMC接口配置、驱动程序设计和时序调试。通过实战案例,展示了如何利用STM32的FMC总线实现与AD7606的高效数据传输,特别强调了电源设计、信号连接和PCB布局等关键要点,为嵌入式数据采集系统开发提供了实用指导。

aa123的博客 1004

小梅哥Xilinx ZYNQ学习笔记2——38译码器

译码器(Decoder)是一种多输入多输出的组合逻辑电路,负责将二进制代码翻译为特定的对象(如逻辑电平等),功能与编码器相反。译码器一般分为通用译码器和数字显示译码器两大类。本设计的是通用译码器。三八译码器,即是 3 种输入状态翻译成 8 种输出状态。1.case开始开始,endcase结束;2.数字声明时,合法的基数格式有 4 中,包括:十进制('d 或 'D),十六进制('h 或 'H),二进制('b 或 'B),八进制('o 或 'O)。数值可指明位宽,也可不指明位宽。

m0_51430584的博客 1636

[leetcode] 85. Maximal Rectangle 解题报告

题目链接:https://leetcode.com/problems/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. 思路:这一题是Maximal Squar

小榕流光的专栏 1546

RK3399平台开发系列讲解(内核入门篇)1.1、通过sysfs清楚了解设备的系统状况

文章目录1、不敢高声语,恐惊天上人:sysfs目的2、窥一斑而知全豹:sysfs目录介绍3、千丝万缕:sysfs中要素的关系4、数据观星:sysfs中相关结构体 1、不敢高声语,恐惊天上人:sysfs目的 我们想通过sys下面的目录和文件清楚的了解跑Liunx系统的嵌入式设备的系统状况。 2、窥一斑而知全豹:sysfs目录介绍 sysfs把连接在系统上的设备和总线组织成为一个分级的文件,它们可以由用户空间存取,向用户空间导出内核的数据结构以及它们的属性。sysfs的一个目的就是展示设备驱动模型中各组件.

内核笔记 1万+

最大长方形 (Maximum Submatrix & Largest Rectangle)(涵盖各种求最大矩形题目)

在这篇文章里,我将探讨几个和求最大长方形相关的题目,并试图说明如何把一些相对复杂的问题化归成简单的易解的问题。这里的最大,可以指长方形内所有元素之各最大,也可以指面积最大。 问题一(最大和子矩阵): 有一个 m x n 的矩阵,矩阵的元素可正可负。请找出该矩阵的一个子矩阵(方块),使得其所有元素之和在所有子矩阵中最大。(问题来源:http://acm.pku.edu.cn/JudgeOnline/problem?id=1050) 问题二(最大 0/1 方块): 有一个 m x n 的矩阵,元素为 ...

sinat_22510827的博客 1020

基于Simulink使用激光雷达数据跟踪车辆仿真(附源码)

这些模型将长方体的尺寸定义为状态转换期间的常量,并且它们的估计值在滤波器的校正阶段随时间演变。下面的动画显示了在滤波器的预测阶段将具有不同概率的恒定速度和恒定转弯率模型混合在一起的效果。此示例显示了如何使用带有 IMM 过滤器的 JPDA 跟踪器来跟踪使用激光雷达传感器的对象。图像和激光雷达数据读取器从 MAT 文件中读取记录的数据,并分别输出参考图像和点云中点的位置。跟踪器块选中“启用所有轨道输出”和“启用可检测的跟踪 ID 输入”复选框,以从跟踪器输出所有轨道,并将其检测概率作为其状态的函数进行计算。

珞瑜的博客 2565

Python爬虫实战:手把手教你园林植物分类全维度字典自动化采集实战!

我长期专注 Python 爬虫工程化实战,主理专栏 👉 《Python爬虫实战》:从采集策略到反爬对抗,从数据清洗到分布式调度,持续输出可复用的方法论与可落地案例。内容主打一个“能跑、能用、能扩展”,让数据价值真正做到——抓得到、洗得净、用得上。

喵手的博客 388

85. 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. 链接: http://leetcode.com/problems/maximal-rectangle/ 题解: 题目就比较难理解。我一看contai...

weixin_33806914的博客 170

NVIDIA Isaac Sim 入门教程 - 运动生成控制器(Motion Generators)

机器人任务通常在任务空间中根据所需的末端执行器轨迹进行定义,而控制动作则在关节空间中执行。这自然会产生关节空间和任务空间(操作空间)控制方法。然而,要利用运动控制成功执行交互任务,往往需要对机械臂及其环境都建立精确的模型。虽然可以知道足够精确的机械臂模型,但很难获得详细的环境描述 [SSVO09]。可以通过在交互过程中引入顺应行为来克服这种不匹配造成的规划错误。虽然顺应性可以通过机器人的结构(如弹性致动器、软机械臂)被动实现,但我们对侧重于主动交互控制的控制器设计更感兴趣。这些设计大致分为注释。

2506_90492529的博客 1577

LeetCode --- 85. 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. 这道题的要求是在0-1矩阵中找出面积最大的全1矩阵。 1. 基于Largest Rectangle in H

makuiyu的专栏 3552

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

[LeetCode 84, 85]Largest Rectangle in Histogram / Maximal Rectangle

LeetCode第84,85号题,解题报告。利用栈的O(n)算法

zlasd的博客 423

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Leetcode:Maximal Square & Maximal Rectangle

url : https://leetcode.com/problems/maximal-square/description/url : https://leetcode.com/problems/maximal-rectangle/description/解题思路: Maximal Square 此题相对简单,使用动态规划。 matrix[i,j]==0时, dp[i,j]=0; matrix[

zhumingyuan111的博客 370

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

leetcode:Maximal Rectangle

这是leetcode的第85题,原题如下:Given a 2D binary matrix filled with 0’s and 1’s, find the largest rectangle containing all ones and return its area.leetcode的第84题是Largest Rectangle in Histogram,原题如下: 解决方案在http

不积跬步,无以至千里 1778

LeetCode 85. Maximal Rectangle 题解

本题是"柱状图中最大的矩形"问题的扩展,需要将二维问题转化为一维问题。将每一行看作柱状图的底部计算每个位置的高度(向上连续的 1 的个数)对每一行使用单调栈求最大矩形面积通过本题可以深入理解如何将复杂问题分解为已解决的子问题。

cannonjinx的博客 4094

leetcode难题之Maximal Rectangle

一,题目简述 leetcode第85题,Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing only 1's and return its area. 在一个只含有0和1的二维矩阵中,找出只含有1的最大矩形并返回其面积。 二,题目分析 在解决这一道题之前,让...

lishinho的博客 281

[leetcode] Maximal Rectangle

Given a 2D binary matrix filled with 0’s and 1’s, find the largest rectangle containing only 1’s and return its area. 能跑的通所有测试用例的$n^3$,$n^4$解法

粉刷匠 450

LeetCode 85. Maximal Rectangle

题目来源:https://leetcode.com/problems/maximal-rectangle/ 问题描述 85.Maximal Rectangle Hard Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing only 1's and return it...

da_kao_la的博客 189

LeetCode 85 (Maximal-Rectangle)java

原题:Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing only 1's and return its area. For example, given the following matrix: 求给定矩阵中全为1的最大长方形的面积; 昨天A

Jassy1994的博客 721

Leetcode 85. Maximal Rectangle 最大矩形 解题报告

1 解题思想这道题我是转化成上一道题来做的,对于每一行,看成给一个直方图在每一行上,首先按照直方图的方式进行统计,然后记录并更新最大,因此计算请看: Leetcode 84. Largest Rectangle in Histogram 最大矩形 解题报告2 原题Given a 2D binary matrix filled with 0’s and 1’s, find the largest

MebiuW的专栏 2810

【LeetCode】【C++】Maximal Rectangle

经典动态规划,面试前必看题

monkeyduck的专栏 2223

LeetCode:85. Maximal Rectangle(最大的矩形)

Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing only 1's and return its area. 翻译:给你一个二维矩阵,权值为False和True,找到一个最大的矩形,使得里面的值全部为True,输出它的面积 Example: Input: [ [...

zy345293721的博客 475
上一篇: Submission Details [leetcode] 算法的改进
下一篇: Max Points on a Line [leetcode]
圆形毕露
博客等级 码龄17年 20粉丝 103原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值