当前位置: 首页 > news >正文

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

哈喽,各位,我是前端小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.zskr.cn/news/63899.html

相关文章:

  • Window Docker 安装MySQL8.0全流程 保姆级
  • 雅思报班终极参考:2025年5大实力机构深度测评(附封闭班详情)
  • 2025年上海职场人士婚介所推荐TOP5,高性价比的婚介公司
  • 2025年比较好的远程医疗行业排行榜
  • 2025年口碑好的粉末冶金齿轮/粉末冶金厂家实力及用户口碑排行榜
  • 2025年口碑好的机器人编程/机器人编程加盟本地权威榜
  • 祛斑厉害的三个牌子榜单揭晓,效果好的祛斑产品有哪些?
  • 记一次flink任务因sink表被锁住而引发的flink雪崩问题
  • KINGMA Odometer Correction Tool: Easy Cluster Programming Mileage Adjustment for EU/US Cars
  • 2025年口碑好的氮气电加热器/天然气电加热器高评价厂家推荐榜
  • 2025年有实力的外贸ERP品牌企业排名:口碑好的外贸ERP
  • 2025年评价高的木质艺术楼梯/艺术楼梯厂家实力及用户口碑排行榜
  • 短期高效提分!2025年国内雅思封闭班核心机构评测
  • 2025年耐用的步进式清洗机厂家最新权威推荐排行榜
  • 2025年热门的三相电力设备/铁塔电力设备厂家推荐及选购参考榜
  • 2025 年 UV 树脂定制厂家最新推荐榜,聚焦企业技术研发实力与市场服务口碑深度解析双重固化/光固化/油性/3D 打印/甲油胶/三防漆/手感/真空电镀/准分子 UV 树脂公司推荐
  • 雅思高效出分选对机构!2025年高性价比机构推荐及选课技巧
  • 2025年质量好的净化材料净化板厂家最新权威推荐排行榜
  • 2025年口碑好的正极电动搬运车用户好评厂家排行
  • 12.基础语法-变量
  • 什么产品美白效果比较好?2025权威机构认证榜单,让你告别暗黄沉着
  • 2025 年电线电缆实力厂家最新推荐排行榜:聚焦架空绝缘 / KV 级 / 塑料绝缘等多类电缆,精选优质企业供工程与家装选购参考
  • 量化评估下的行业真相:网络公关公司综合实力榜单解读
  • 2025 年四川衣柜橱柜全屋定制供应商口碑推荐排行榜
  • 2025 年 11 月 NMP 溶剂厂家权威推荐榜:高纯度电子级/医药级 N-甲基吡咯烷酮、N-甲基-2-吡咯烷酮、1-甲基-2-吡咯烷酮优质供应商精选
  • 2025年知名的球磨机参数/球磨机设计厂家实力及用户口碑排行榜
  • 2025 自动化运维厂商选型关键:自动化巡检如何筑牢业务连续性防线?
  • 2025年评价高的舟山注塑螺杆/片材螺杆厂家最新用户好评榜
  • 2025年专业的梯形排水沟滑模机/全自动水沟滑模机厂家推荐及选购指南
  • 深入解析:基于STM32的智能天气时钟