尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

221. 最大正方形

221. 最大正方形
📅 发布时间:2026/6/17 18:59:27

在一个由 '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 == 0 或 j == 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)

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

挣钱养家

相关新闻

  • 2025年11月打印纸正规工厂评价榜:优质供应厂家全扫描
  • 2025年福田欧曼重卡深度解析:权威推荐全场景价值标杆
  • 2025年福田欧曼重卡权威解析:深度推荐全场景节能王者

最新新闻

  • 2026鹰潭余江区黄金回收靠谱门店全盘点!30年老品牌全城覆盖,免费上门无隐形扣费 - 衡金阁
  • Geatpy进化算法工具箱:Python高性能优化计算的终极解决方案
  • Sirius内存管理技术:cuCascade分层内存与磁盘溢出机制
  • jQuery Anystretch核心功能解析:10个实用技巧提升网站视觉体验
  • 2026年上海防水补漏服务完全指南:从老洋房到现代公寓的漏水根治方案 - 精选优质企业推荐官
  • 2026年6月行业内头部硅芯管源头厂家推荐,PVC塑料管/60/50硅芯管/河北格栅管,硅芯管源头厂家口碑推荐 - 品牌推荐师

日新闻

  • 2026年不锈钢卷板厂家推荐排行榜:冷轧热轧/304/201不锈钢卷板,高颜值耐腐蚀源头厂家实力精选 - 企业推荐官【官方】
  • FLUX.1-dev FP8模型实战指南:24GB以下显卡高效部署方案
  • 2026佛山长途搬家价目表:跨省跨市搬家费用完整计算指南 - 从来都是英雄出少年

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号