Java 中的最大正方形矩阵问题2025年1月7日 | 阅读 6 分钟 最大的正方形矩阵问题 涉及在一个给定的二进制矩阵中找到最大的正方形子矩阵,其中子矩阵的所有元素都为 1。这是一个经典的动态规划问题,用于高效地解决二维问题。 在 Java 中,解决该问题可以通过创建一个辅助矩阵来存储中间结果,与朴素解法相比,这可以显著降低时间复杂度。 问题陈述给定一个由 0 和 1 组成的布尔矩阵,找出并打印最大的全为 1 的正方形子矩阵。 最大正方形矩阵示例 矩阵 0 0 1 1 0 1 1 1 0 0 0 1 输出 1 1 1 1 问题解决方案朴素方法这是查找最大正方形矩阵的最简单方法。给定问题的算法如下。 算法步骤 1:创建一个与输入矩阵相同维度的二维辅助矩阵 S,用于存储以每个位置为终点的最大正方形子矩阵的大小。 步骤 2:将输入矩阵的第一行和第一列直接复制到辅助矩阵 S 中。跟踪在这些行和列中找到的最大正方形子矩阵的大小。 步骤 3:对于输入矩阵中的每个单元格 matrix[i][j](从第二行和第二列开始),如果该单元格包含 1,则使用以下公式计算以该单元格为终点的最大正方形子矩阵的大小:
步骤 4:使用跟踪到的最大尺寸和位置打印最大的正方形子矩阵的元素。 步骤 5:返回全为 1 的最大正方形子矩阵的大小。 让我们在 Java 程序中实现上述算法。文件名:LargestSquareMatrix.java 输出 The largest square sub-matrix with all 1s is: 1 1 1 1 The size of the largest square sub-matrix with all 1s is: 2 时间复杂度 上述代码的时间复杂度为 O(rows×cols),其中 rows 是矩阵的行数,cols 是矩阵的列数。这是因为代码会遍历矩阵中的每个单元格一次。 辅助空间 上述代码的辅助空间为 O(rows×cols)。这是因为使用了额外的 S 矩阵空间,其尺寸与输入矩阵相同。 使用动态规划方法我们将使用一个动态规划 (DP) 表,其中 dp[i][j] 表示以 (i, j) 为右下角的最大的全为 1 的正方形子矩阵的边长。 算法步骤 1:创建一个与输入矩阵相同维度的二维数组 dp。 步骤 2:如果原始矩阵中的元素为 0,则 DP 表中对应的元素也将为 0,因为任何正方形子矩阵都不能以值为 0 的单元格结束。 步骤 3:如果原始矩阵中的元素为 1,则 dp[i][j] 的值将是其上方 (dp[i-1][j])、左方 (dp[i][j-1]) 和左上方对角线 (dp[i-1][j-1]) 邻居值的最小值加 1。 步骤 4:这将是最大的全为 1 的正方形子矩阵的大小。 让我们在 Java 程序中实现上述算法。 文件名:LargestSquareMatrixDP.java 输出 The size of the largest square sub-matrix with all 1s is: 2 时间复杂度 上述代码的时间复杂度为 O(rows×cols),其中 rows 是矩阵的行数,cols 是矩阵的列数。这是因为我们遍历了矩阵中的每个单元格一次。 辅助空间 上述代码的辅助空间为 O(rows×cols)。这是因为使用了额外的 dp 数组空间,其尺寸与输入矩阵相同。 下一个主题对象引用相等性 |
在本节中,我们将了解 Java 中的 Xmx 是什么,以及如何为 Java 应用程序设置最大堆大小。在 Java 中,有时当我们运行 Java 应用程序时,会收到类似以下的错误消息:Error occurred during initialization of VM. Could not reserve...
阅读 3 分钟
在 Java 编程中,有许多记录系统对于正确存储和操作数据至关重要。其中一种事实形状是 ArrayList,它是一个动态数组,可以根据需要增长或缩小。在某些时候,我们可能会遇到条件...
阅读 4 分钟
就餐哲学家问题是处理竞争进程之间有限资源分配的并发问题的一个例子。在本节中,我们将了解如何在就餐哲学家问题中避免死锁条件。这是并发系统中不良的条件。它是...
阅读 6 分钟
在本节中,我们将创建一个 Java 程序来显示 1 到 100 之间的偶数。要学习 Java 偶数程序,您必须具备 Java for 循环和 if 语句的基本知识。我们可以使用不同的方法来显示偶数:使用 Java...
阅读 3 分钟
单词分割问题是判断一个特定字符串是否能被分割成给定词典中存在的有效单词。目标是确定字符串是否能从列表中分割成一个或多个单词。这个问题可以……
阅读 16 分钟
给定一个仅由小写字母组成的长度为 m 的字符串。我们必须使用字典序方法来确定字符串的第 n 个排列。示例 1:输入:字符串 str[] = "xyz" int n = 4 输出:字典序排列为 "xzy" 说明:所有可能排列的排序顺序:xyz、xzy、yxz、yzx、zxy,...
阅读 4 分钟
在 Java 中,有三种类型的语句:声明、表达式和控制语句。除此之外,还有另一种称为空语句的语句。在本节中,我们将通过示例讨论 Java 中的空语句。空语句顾名思义,就是一个空的...
阅读 4 分钟
JSch(Java 安全通道)是一个流行的 Java 库,它允许开发人员通过 SSH 连接到远程服务器,并使用 SFTP(安全文件传输协议)执行安全文件传输。它广泛用于自动化文件传输、远程命令执行和安全身份验证。分步过程 步骤...
阅读 6 分钟
指的是 Java Enterprise Edition,以前称为 J2EE,目前称为 Jakarta EE。它是一组围绕 Java SE(标准版)的规范。提供了一个平台,为开发人员提供企业级功能,例如分布式计算...
阅读 4 分钟
组合设计模式是一种设计模式,它允许我们将对象排列成树形结构来表示部分-整体设计。它允许客户精确地处理单个项目和包。简单来说,它允许我们将单个对象与...
5 分钟阅读
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India