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

【多维动态规划】Leetcode 221. 最大正方形【中等】

最大正方形

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

示例 1:

在这里插入图片描述
输入:matrix = [[“1”,“0”,“1”,“0”,“0”],[“1”,“0”,“1”,“1”,“1”],[“1”,“1”,“1”,“1”,“1”],[“1”,“0”,“0”,“1”,“0”]]
输出:4

解题思路

  • 使用一个二维数组 dp,其中 dp[i][j] 表示以矩阵位置 (i, j) 为右下角的最大正方形的边长。
  • 为了计算 dp[i][j] 的值,需要考虑 matrix[i][j] 是否为 ‘1’,如果是 ‘0’,
    则 dp[i][j] = 0
  • 否则 dp[i][j] 的值由其上方、左方和左上方的 dp 值决定:
    dp[i][j]=min(dp[i−1][j],dp[i][j−1],dp[i−1][j−1])+1

Java实现

public class MaximalSquare {public int maximalSquare(char[][] matrix) {if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {return 0;}int rows = matrix.length;int cols = matrix[0].length;int[][] dp = new int[rows + 1][cols + 1];int maxSide = 0;for (int i = 1; i <= rows; i++) {for (int j = 1; j <= cols; j++) {if (matrix[i - 1][j - 1] == '1') {dp[i][j] = Math.min(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;}// 测试用例public static void main(String[] args) {MaximalSquare solution = new MaximalSquare();char[][] matrix1 = {{'1', '0', '1', '0', '0'},{'1', '0', '1', '1', '1'},{'1', '1', '1', '1', '1'},{'1', '0', '0', '1', '0'}};System.out.println(solution.maximalSquare(matrix1));  // 期望输出: 4char[][] matrix2 = {{'0', '1'},{'1', '0'}};System.out.println(solution.maximalSquare(matrix2));  // 期望输出: 1char[][] matrix3 = {{'0'}};System.out.println(solution.maximalSquare(matrix3));  // 期望输出: 0}
}

时间空间复杂度

  • 时间复杂度:O(m * n),其中 m 是矩阵的行数,n 是矩阵的列数,需要遍历矩阵中的每一个元素。

  • 空间复杂度:O(m * n),使用了一个大小为 m * n 的 dp 数组。

相关文章:

  • AI 会淘汰程序员吗?
  • MySQL之如何处理超大分页
  • Qt绘制多线段
  • vue组件深入介绍之插槽
  • [Go 微服务] Kratos 验证码业务
  • PHP电商系统开发指南数据库管理
  • 多线程软件不响应处理
  • JAVA 面试常见问题详解
  • 模板类内部能否含有虚函数?
  • Android动画:提升用户体验的关键技术
  • Python特征工程 — 1.4 特征归一化方法详解
  • 有什么简单方便的提取图片文字的方法?6个软件教你快速提取图片文字
  • day02-广播机制
  • 【手撕面试题】React(高频知识点一)
  • GitHub每日最火火火项目(7.2)
  • CSS居中完全指南——构建CSS居中决策树
  • php中curl和soap方式请求服务超时问题
  • Quartz初级教程
  • 闭包--闭包之tab栏切换(四)
  • 从输入URL到页面加载发生了什么
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 关于springcloud Gateway中的限流
  • 简析gRPC client 连接管理
  • 类orAPI - 收藏集 - 掘金
  • 那些年我们用过的显示性能指标
  • 时间复杂度与空间复杂度分析
  • 树莓派 - 使用须知
  • 小程序测试方案初探
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 学习Vue.js的五个小例子
  • 《天龙八部3D》Unity技术方案揭秘
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • ​油烟净化器电源安全,保障健康餐饮生活
  • # 详解 JS 中的事件循环、宏/微任务、Primise对象、定时器函数,以及其在工作中的应用和注意事项
  • #define用法
  • $().each和$.each的区别
  • (16)Reactor的测试——响应式Spring的道法术器
  • (C++)八皇后问题
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (Git) gitignore基础使用
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (转)母版页和相对路径
  • .NET 8.0 发布到 IIS
  • .Net(C#)自定义WinForm控件之小结篇
  • .Net6 Api Swagger配置
  • .sdf和.msp文件读取
  • // an array of int
  • @column注解_MyBatis注解开发 -MyBatis(15)
  • @FeignClient 调用另一个服务的test环境,实际上却调用了另一个环境testone的接口,这其中牵扯到k8s容器外容器内的问题,注册到eureka上的是容器外的旧版本...
  • [ 隧道技术 ] 反弹shell的集中常见方式(四)python反弹shell
  • [23] GaussianAvatars: Photorealistic Head Avatars with Rigged 3D Gaussians
  • [240527] 谷歌 CEO 承认 AI 编造虚假信息问题难解(此文使用 @gemini 命令二次创作)| ICQ 停止运作