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

算法-js-最大矩形

题:给定一个由 0 和 1 组成的矩阵 matrix ,找出只包含 1 的最大矩形,并返回其面积。
注意:此题 matrix 输入格式为一维 01 字符串数组。

function maximalRectangle(matrix) {if (matrix.length === 0) return 0;const m = matrix.length;const n = matrix[0].length;let maxArea = 0;// 初始化高度数组(处理第一行)const heights = new Array(n).fill(0);for (let row of matrix) {// 动态更新高度数组for (let j = 0; j < n; j++) {heights[j] = row[j] === '1' ? heights[j] + 1 : 0;}// 计算当前行的最大矩形面积maxArea = Math.max(maxArea, largestRectangleArea(heights));}return maxArea;
}// 柱状图最大面积算法
function largestRectangleArea(heights) {let maxArea = 0;const stack = [];heights = [0, ...heights, 0];for (let i = 0; i < heights.length; i++) {while (stack.length && heights[i] < heights[stack[stack.length - 1]]) {const cur = stack.pop();const left = stack[stack.length - 1];maxArea = Math.max(maxArea, (i - left - 1) * heights[cur]);}stack.push(i);}return maxArea;
}// 测试用例
console.log(maximalRectangle(["10100","10111","11111","10010"])); // 输出 6
console.log(maximalRectangle(["1"]));                            // 输出 1
console.log(maximalRectangle(["1111","1111","1111"]));           // 输出 12

关键步骤:
1、生成高度数组;
2、对每行高度应用柱状图算法

关键点说明

高度数组的构建:
每个位置的高度表示:从当前行向上连续1的个数
遇到0时高度重置为0(无法形成矩形)

复杂度分析:
时间复杂度:O(mn),每行处理需要O(n)时间
空间复杂度:O(n),只需存储当前行的高度数组

性能优势:
比暴力解法的O(m²n)效率提升显著
复用柱状图算法保证每行处理的效率

http://www.xdnf.cn/news/6996.html

相关文章:

  • 深度学习推理引擎---ONNX Runtime
  • 【电路笔记 STM32】 STM32CubeProgrammer 下载 安装 使用
  • 【ESP32】ESP-IDF开发 | 低功耗蓝牙开发 | GATT规范和ATT属性协议 + 电池电量服务例程
  • 单细胞转录组(3)
  • 单细胞转录组(2)单细胞测序原理
  • 5.2.1_2二叉树的性质
  • AUTOSAR图解==>AUTOSAR_SRS_V2XCommunication
  • 初探Reforcement Learning强化学习【QLearning/Sarsa/DQN】
  • docker-compose——安装mongo
  • C++文件操作--2 二进制文件操作
  • Java零基础学习Day15——面向对象进阶
  • 基于Fashion-MNIST的softmax回归-直接运行
  • dagster的etl实现
  • 硬件工程师笔记——二极管Multisim电路仿真实验汇总
  • 一分钟用 MCP 上线一个 2048 小游戏(CodeBuddy版)
  • 84.评论日记
  • Level2.8蛇与海龟(游戏)
  • 在WSL中的Ubuntu发行版上安装Anaconda、CUDA、CUDNN和TensorRT
  • 校平机:金属板料处理的核心工艺装备​
  • 【软件测试】性能测试 —— 工具篇 LoadRunner 介绍与使用
  • 【HCIA】MUX VLAN
  • 【原创】基于视觉大模型gemma-3-4b实现短视频自动识别内容并生成解说文案
  • 从零开发 1688 数据接口:商品详情页实时采集 API 接入详解
  • facebook的Open Molecules 2025 (OMol25) 数据集、评估与模型开源速读
  • Mysql数据库之集群进阶
  • 从ThreadLocal到Scoped Values:Java高效数据共享机制的革命性演进
  • 代码随想录算法训练营第四十二四十三天
  • (保姆级)Win10 安装Oracle Developer Suite教程
  • OpenCV 特征检测全面解析与实战应用
  • C++学习:六个月从基础到就业——C++11/14:auto类型推导