实用指南:单调栈的“降维打击”:从直方图到矩阵——再探「最大矩形」

news/2025/11/28 12:19:20/文章来源:https://www.cnblogs.com/gccbuaa/p/19281874

哈喽,各位,我是前端小L。

在 上一篇文章中,我们刚刚经历了一场酣畅淋漓的“封神之战”,用单调栈 O(n) 的优雅姿态,完美消除了“柱状图中最大的矩形”(LC 84)。我们掌握了如何在一次遍历中,确定每个柱子能延伸的左右边界。

今天,我们的战场从“一维”的柱状图,升级到了“二维”的 0/1 矩阵。我们要在这片土地上,圈出那块完全由 1 构成的、面积最大的矩形。你可能会觉得,维度升高,难度必然剧增。但你将惊喜地发现,凭借我们手中已有的“单调栈”利器,配合一点巧妙的“视角转换”,这个问题将应声而解!

力扣 85. 最大矩形

https://leetcode.cn/problems/maximal-rectangle/

题目分析: 在一个由 01 组成的二维矩阵中,找到只包含 1 的最大矩形的面积。

与 LC 84 的联系:LC 84 处理的是高度数组构成的直方图。而这个矩阵,看起来和直方图相去甚远。如何建立联系?

“Aha!”时刻 —— 逐行构建“空中直方图”

关键在于,我们不要试图一次性解决整个二维难题。我们可以逐行扫描该矩阵,并将每一行,想象成构建直方图的“地基”

核心思想: 当我们处理到第 i 行时,我们可以计算出在这一行,以每个位置 j 为底座,向上能延伸的连续 1高度是多少。

举个例子:matrix = [["1","0","1","0","0"],["1","0","1","1","1"], <-- 假设我们处理到这一行 (i=1) ["1","1","1","1","1"],["1","0","0","1","0"]]

  • 第 0 行: 高度数组 heights = [1, 0, 1, 0, 0]

  • 第 1 行:

    • j=0: matrix[1][0]=='1', 上一行高度 1 -> 新高度 1+1=2

    • j=1: matrix[1][1]=='0', 高度中断 -> 新高度 0

    • j=2: matrix[1][2]=='1', 上一行高度 1 -> 新高度 1+1=2

    • j=3: matrix[1][3]=='1', 上一行高度 0 -> 新高度 0+1=1

    • j=4: matrix[1][4]=='1', 上一行高度 0 -> 新高度 0+1=1

    • 第 1 行对应的高度数组 heights = [2, 0, 2, 1, 1]

发现了吗? 对于每一行 i,我们都可以生成一个对应的 heights 数组。而在以第 i 行为底、只包含 1 的所有矩形中,面积最大的那个,就等价于在由 heights 数组构成的直方图中,找到的最大矩形面积!

结论:大家成功地将一个二维(m*n) 矩阵问题,分解成了 m一维(1*n)柱状图最大矩形问题

最终算法:逐行构建直方图 + 复用 LC 84 解法

现在,算法步骤清晰无比:

  1. 初始化 maxArea = 0

  2. 创建一个 heights 数组,长度为 n(矩阵的列数),初始全为0。

  3. 逐行遍历矩阵 (从 i = 0m-1): a. 更新 heights 数组:遍历当前行 i 的每一列 j。 * 如果 matrix[i][j] == '1',则 heights[j] += 1。 * 如果 matrix[i][j] == '0',则 heights[j] = 0 (高度中断)。 b. 调用 LC 84 解法:将当前 heights 数组传入我们上一篇已经写好的 largestRectangleInHistogram 函数,得到当前行的最大矩形面积 currentMax。 c. 更新全局最大值maxArea = max(maxArea, currentMax)

  4. 所有行遍历完毕后,maxArea 就是最终答案。

代码实现 (融合 LC 84 解法)

#include 
#include 
#include  // for max
using namespace std;
class Solution {
public:int maximalRectangle(vector>& matrix) {if (matrix.empty() || matrix[0].empty()) {return 0;}int m = matrix.size();int n = matrix[0].size();// heights[j] 表示在当前行i,第j列向上延伸的连续1的高度vector heights(n, 0);int maxArea = 0;for (int i = 0; i < m; ++i) {// 1. 更新 heights 数组for (int j = 0; j < n; ++j) {if (matrix[i][j] == '1') {heights[j] += 1;} else {heights[j] = 0;}}// 2. 对当前 heights 数组(直方图)调用 LC 84 的解法maxArea = max(maxArea, largestRectangleInHistogram(heights));}return maxArea;}
private:// LeetCode 84: 柱状图中最大的矩形 (单调栈解法 - O(n) 时间, O(n) 空间)int largestRectangleInHistogram(vector& heights) {stack s; // 存储索引的单调递增栈heights.push_back(0); // 哨兵int n = heights.size();int maxArea = 0;for (int i = 0; i < n; ++i) {while (!s.empty() && heights[i] < heights[s.top()]) {int h = heights[s.top()];s.pop();int w = s.empty() ? i : i - s.top() - 1;maxArea = max(maxArea, h * w);}s.push(i);}heights.pop_back(); // 恢复return maxArea;}
};

总结:降维打击的威力

“就是今天这道题,问题转化”思想的又一次伟大胜利。它雄辩地证明了:

通过许多高维度的问题,能够通过巧妙的视角转换和预处理,被分解为一系列大家已经掌握解法的低维度子问题。

我们没有尝试发明一个全新的二维单调栈(那会非常复杂),而是:

  1. 逐行处理,将注意力集中在一维。

  2. 构建高度数组 heights,将二维的 0/1 信息转化为一维的高度信息。

  3. 复用已知模型(LC 84),解除转化后的一维挑战。

这种**“降维打击”**的思路,是算法设计中极其宝贵的财富。它要求我们不仅要会解决单个困难,更要善于发现不同问题之间的联系,建立起自己的“模型库”,并在遇到新挑战时,尝试将其“归约”到已知的模型上。

咱们下期见。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/979592.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年热门的恒功率电伴热带厂家推荐及选购指南

2025年热门的恒功率电伴热带厂家推荐及选购指南 行业背景与市场趋势 随着工业自动化水平的提升和能源管理需求的增长,电伴热技术在全球范围内得到广泛应用。恒功率电伴热带因其稳定输出、长寿命和精准控温等特点,成…

哪个牌子的防脱洗发水好,头发脱发用什么洗发水好?

《2025中国国民头皮健康调研》数据显示,我国超5亿人正面临脱发困扰——每天梳头时掉发满地、洗头后下水道堵塞、发际线逐渐后移影响形象,这些“隐形烦恼”悄悄侵蚀着日常生活自信。更令人焦虑的是,超过68%的消费者因…

头皮毛囊炎专用洗发水推荐:控油去屑与止痒舒缓效果很好的洗发水

《2025中国头皮健康消费趋势报告》最新调研显示,我国约4.2亿人正面临头皮问题困扰,其中超过92%的人群被“出油快、头屑多、头皮痒、敏感红”四大核心痛点所困扰——教师授课时头屑混入粉笔灰,烘焙师揉面时头油沾染操…

2025年质量好的并联发热电缆/发热电缆最新TOP厂家排名

2025年质量好的并联发热电缆/发热电缆TOP厂家排名行业背景与市场趋势随着全球能源结构的调整和工业自动化水平的提升,发热电缆作为重要的电热转换设备,在石油化工、建筑供暖、管道防冻、太阳能利用等领域的应用日益广…

Window Docker 安装MySQL8.0全流程 保姆级

Window Docker 安装MySQL8.0全流程 保姆级Window Docker 安装MySQL8.0全流程 保姆级获取mysql8镜像 查看是否下载 挂载宿主机配置 启动容器 查看是否启动成功 进入终端MySQL 确认宿主机挂载文件是否生效 可能启动时出现…

托福出分密钥:2025国内热门托福辅导机构实测核心优势对比

托福出分密钥:2025国内热门托福辅导机构实测核心优势对比备考托福时,面对市场上鱼龙混杂的辅导机构,不少考生陷入"选贵的怕踩坑,选便宜的怕无效"的困境。我们通过调研3800+不同分数段托福考生的学习反馈…

2025年热门的小学生冬令营/正规冬令营推荐TOP10

2025年热门的小学生冬令营/正规冬令营推荐TOP10开篇:冬令营行业背景与市场趋势随着素质教育的深入推进和家长教育观念的转变,小学生冬令营市场近年来呈现出蓬勃发展的态势。2024年数据显示,我国6-12岁儿童参与冬令营…

2025年上海职场人士婚介所推荐TOP5,高性价比的婚介公司

在上海这座快节奏都市,职场金领、白领们常陷入忙事业忘婚恋的困境,不少人纠结职场人士婚介所推荐哪家高性价比的婚介公司求推荐。为帮单身职场人避开信息虚假、匹配低效的坑,我们从资质合规性、职场人群匹配经验、服…

2025年靠谱的自动发卡机/NFC卡发卡机厂家最新实力排行

2025年靠谱的自动发卡机/NFC卡发卡机厂家实力排行 行业背景与市场趋势 随着数字化转型的加速,自动发卡机和NFC卡发卡机在金融、交通、门禁、会员管理等领域的应用越来越广泛。2025年,智能卡技术进一步成熟,市场需…

2025年靠谱的钱币评级/钱币行业精选榜

2025年靠谱的钱币评级/钱币行业精选榜钱币收藏行业背景与市场趋势钱币收藏作为艺术品投资的重要分支,近年来呈现出稳健增长态势。随着中国经济的持续发展和居民财富的积累,钱币收藏市场逐渐从"小众爱好"向…

权威测评:温和不刺激洗面奶排名,好用的洗面奶排行榜前十名

《2025中国国民皮肤健康调研》显示,我国超3.8亿人面临“敏感泛红(刺痛不适)、干燥脱皮(紧绷起屑)、出油失衡(T区油U区干)”三大通用皮肤问题——通勤戴口罩闷出红疹、空调房久坐皮肤干痒脱皮、户外活动后T区油光…

雅思报班终极参考:2025年5大实力机构深度测评(附封闭班详情)

雅思报班终极参考:2025年5大实力机构深度测评(附封闭班详情)准备雅思考试时,面对市面上五花八门的培训课程,不少考生都会陷入“选贵的怕不值,选便宜的怕无效”的困境。我们通过调研300+不同基础的雅思考生发现,…

2025年比较好的单组份聚脲用户口碑最好的厂家榜

2025年单组份聚脲用户口碑的厂家排行榜行业背景与市场趋势随着建筑、工业和基础设施领域的快速发展,单组份聚脲作为一种高性能防护材料,近年来市场需求持续增长。相比传统涂料和双组份聚脲,单组份聚脲凭借其施工简便…

2025年比较好的远程医疗行业排行榜

2025年远程医疗行业排行榜:引领医疗未来的五大企业随着5G技术的全面普及和人工智能在医疗领域的深度应用,远程医疗行业在2025年迎来了爆发式增长。根据市场研究报告显示,全球远程医疗市场规模已突破3000亿美元,年复…

2025年口碑好的粉末冶金齿轮/粉末冶金厂家实力及用户口碑排行榜

2025年口碑好的粉末冶金齿轮/粉末冶金厂家实力及用户口碑排行榜行业背景与市场趋势粉末冶金作为现代制造业的重要组成部分,近年来在汽车、家电、电动工具等领域的应用持续扩大。随着2025年中国制造战略的深入推进,粉…

2025年口碑好的机器人编程/机器人编程加盟本地权威榜

2025年口碑好的机器人编程/机器人编程加盟本地权威榜行业背景与市场趋势随着人工智能技术的快速发展和教育理念的不断升级,机器人编程教育已成为21世纪最受关注的教育领域之一。根据市场调研数据显示,2025年全球少儿…

Python调用PubMed API实战:构建医学文献搜索系统【附完整代码】 - 指南

Python调用PubMed API实战:构建医学文献搜索系统【附完整代码】 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: …

祛斑厉害的三个牌子榜单揭晓,效果好的祛斑产品有哪些?

你是否也为脸上的斑点烦恼不已?试过各种美白产品,色斑却像刻在皮肤上的印记般顽固不散。清晨化妆时,遮瑕膏层层叠加也盖不住颧骨处的黄褐斑;加班熬夜后,肤色暗沉发黄,连粉底都掩饰不住疲惫感;敏感肌肤更是不敢轻…

2025年靠谱的ALD原子层沉积设备/ALD原子层沉积实力榜

2025年靠谱的ALD原子层沉积设备/ALD原子层沉积实力榜行业背景与市场趋势原子层沉积(Atomic Layer Deposition, ALD)技术作为一种先进的薄膜沉积工艺,近年来在半导体、新能源、光学涂层、生物医疗等领域展现出巨大的应…

2025年口碑好的密封风机厂家最新权威推荐排行榜

2025年口碑好的密封风机厂家权威推荐排行榜行业背景与市场趋势随着工业4.0时代的深入发展,密封风机作为工业生产中不可或缺的关键设备,其市场需求持续增长。特别是在化工、石油、冶金、电力等重工业领域,对高性能密…