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

221. 最大正方形

在一个由 '0' 和 '1' 组成的二维矩阵内,找到只包含 '1' 的最大正方形,并返回其面积。

这是一个经典的 最大正方形 动态规划问题。


思路分析

dp[i][j] 表示以 (i, j)右下角的最大正方形的边长。

状态转移方程

如果 matrix[i][j] == '1':dp[i][j] = min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1]) + 1
否则:dp[i][j] = 0

解释

  • (i, j) 为右下角的正方形,其大小受限于:
    • 上方能形成的正方形大小 dp[i-1][j]
    • 左方能形成的正方形大小 dp[i][j-1]
    • 左上方能形成的正方形大小 dp[i-1][j-1]
  • 取三者最小值 + 1(当前格子本身)

算法步骤

  1. 初始化 dp 数组,大小与 matrix 相同
  2. 遍历每个格子 (i, j)
    • 如果 matrix[i][j] == '1'
      • 如果 i == 0j == 0(第一行/列),dp[i][j] = 1
      • 否则 dp[i][j] = min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1]) + 1
    • 否则 dp[i][j] = 0
  3. 记录遍历过程中的最大边长 maxSide
  4. 返回 maxSide * maxSide

代码实现

/*** @param {character[][]} matrix* @return {number}*/
var maximalSquare = function(matrix) {if (!matrix.length || !matrix[0].length) return 0;const m = matrix.length;const n = matrix[0].length;const dp = Array.from({ length: m }, () => Array(n).fill(0));let maxSide = 0;for (let i = 0; i < m; i++) {for (let j = 0; j < n; j++) {if (matrix[i][j] === '1') {if (i === 0 || j === 0) {dp[i][j] = 1;} else {dp[i][j] = Math.min(dp[i-1][j],dp[i][j-1], dp[i-1][j-1]) + 1;}maxSide = Math.max(maxSide, dp[i][j]);}}}return maxSide * maxSide;
};

空间优化版

由于 dp[i][j] 只依赖于上一行和当前行的前一个元素,可以优化到 O(n) 空间:

var maximalSquare = function(matrix) {if (!matrix.length || !matrix[0].length) return 0;const m = matrix.length;const n = matrix[0].length;let dp = Array(n).fill(0);let maxSide = 0;let prev = 0; // 存储 dp[i-1][j-1]for (let i = 0; i < m; i++) {for (let j = 0; j < n; j++) {const temp = dp[j]; // 保存给下一轮作为 previf (matrix[i][j] === '1') {if (i === 0 || j === 0) {dp[j] = 1;} else {dp[j] = Math.min(dp[j], dp[j-1], prev) + 1;}maxSide = Math.max(maxSide, dp[j]);} else {dp[j] = 0;}prev = temp;}}return maxSide * maxSide;
};

示例演示

例子

matrix = [["1","0","1","0","0"],["1","0","1","1","1"],["1","1","1","1","1"],["1","0","0","1","0"]
]

DP 表(存储边长):

1 0 1 0 0
1 0 1 1 1
1 1 1 2 2
1 0 0 1 0

最大边长 = 2,面积 = 4。


复杂度分析

  • 时间复杂度:O(m × n) - 遍历整个矩阵
  • 空间复杂度
    • 基础版:O(m × n)
    • 优化版:O(n)

这是解决该问题的最优方法。

http://www.jsqmd.com/news/29128/

相关文章:

  • 2025年11月福田欧曼重卡销量榜:供应厂家口碑排行对比
  • 2025年11月打印纸正规工厂评价榜:优质供应厂家全扫描
  • 2025年11月打印纸正规生产厂家榜:比较有实力工厂排名对比
  • 2025年11月打印纸正规工厂榜单:商务印刷高口碑供应厂家对比
  • 2025年11月福田欧曼重卡销量榜:靠谱厂家正规排行深度评测
  • 2025年11月福田欧曼重卡销量靠谱榜:生产厂家排名与全品系销量评测
  • 2025年11月福田欧曼重卡销量对比榜:口碑好生产厂家正规排名
  • 2025年11月福田欧曼重卡销量评价榜:160万台累计销量背后的区域表现
  • 2025 年 11 月刮泥机厂家推荐排行榜,中心传动刮泥机,周边传动刮泥机,单轨式刮泥机,行车式刮泥机公司推荐
  • 2025年福田欧曼重卡深度解析:权威推荐全场景价值标杆
  • 2025年福田欧曼重卡权威解析:全场景技术路线推荐与风险盘点
  • 2025年福田欧曼重卡深度解析:权威推荐全场景节能王者
  • 2025年福田欧曼重卡权威解析:深度推荐全场景节能王者
  • 2025年深度解析推荐淮星复印纸:性价比与渠道优势全景盘点
  • 2025年11月打印纸优质供应厂家排名:口碑好工厂全面评价
  • 2025年淮星复印纸权威解析:高性价比办公纸品推荐全维度拆解
  • 2025 年 11 月三层绝缘线厂家推荐排行榜:东特/大亚/TOTOKU/古河/TIW-2/TIW-3/TIW-4/TEX-E等品牌型号深度解析及选购指南
  • 2025年11月打印纸专业品牌榜:靠谱生产厂家口碑评价与排行
  • 2025年11月太空舱民宿正规厂家榜:比较好品牌与生产厂家对比
  • 2025年淮安广联纸业深度解析:推荐苏北纸品供应链的智造样本
  • 西红柿成熟度检测系统安装
  • 2025年11月网上兼职赚钱正规平台推荐:避坑榜单与解决方案
  • 2025 年 11 月虎头鲨/沙塘鳢/呆子鱼/虾虎鱼鱼苗养殖厂家推荐排行榜,优质鱼苗与养殖技术深度解析
  • 2025年11月专业摩擦焊机工厂榜单:从1979年首台商品机到专精特新排行
  • 2025年10月精益管理咨询公司推荐:榜单评测看哪家强
  • 2025年10月精益管理咨询公司推荐:实力榜单对比
  • 2025 年 11 月加药装置厂家推荐排行榜,一体化加药装置,全自动加药装置,三腔式加药装置,循环水加药装置,磷酸盐/联氨/PH/PAC/PAM加药装置公司推荐
  • 2025年11月靠谱摩擦焊机品牌排行:实力生产厂家对比评价
  • 2025年10月精益管理咨询公司推荐榜:实力评测
  • 2025年10月精益管理咨询公司推荐:口碑榜全评价