Java 中设置矩阵零2025年3月17日 | 阅读 8 分钟 在本节中,我们将创建用于设置矩阵元素为零的 Java 程序(使用不同的逻辑)。这是编码轮面试中通常最重要的一个问题。 给定一个 m*n 的矩阵。如果矩阵中的任何元素为 0,则将其整行和整列设置为 0。请注意,执行此操作不应使用额外的数组。 例如,考虑以下矩阵。 ![]() 在上面的数组中,第二行第二列的元素为 0。因此,我们将第二行和第二列的所有元素设置为 0。 让我们考虑另一个矩阵。 ![]() 该问题可以通过以下三种方式解决:
让我们逐一讨论上述方法。 暴力破解法设置矩阵零点是一种朴素的方法。在此方法中,我们遍历矩阵,对于每个 0,我们将相应的行和列更新为 0。该方法非常简单,但可能导致错误的结果。 那么,正确的解决方案是什么? 解决方案步骤
伪代码 在上述方法中,我们遍历了矩阵对应单元格的每一行和每一列。该方法的时间复杂度为 O(n*m(n+m)),空间复杂度为 O(n*m)(用于存储辅助矩阵)。 但是我们的任务是无需使用额外空间即可完成。以下方法演示了这一点。 使用哈希表在此方法中,我们将使用哈希表。首先,我们将为矩阵的所有行和列创建一个哈希表,并将其设置为 false。如果任何行和列中的值更新为 true,则表示将该特定行和列的值更新为 0。 解决方案步骤
让我们将上述步骤转换为逻辑。 伪代码 对于上述方法,时间复杂度为O(n*m)。因为创建和填充两个哈希表 [O(n+m)] + 遍历矩阵 [O(n*m)] + 更新矩阵 [O(n*m)]。因此,时间复杂度为 O(n*m)。由于我们使用了两个哈希表来存储元素,因此空间复杂度为 O(n+m)。 上述方法也不是最优的。通过使用原地哈希可以实现最优解决方案。 使用原地哈希在此方法中,我们将行和列的哈希存储在矩阵本身中。我们可以使用矩阵的第一行和第一列来分别存储行和列的状态。第一行和第一列的状态可能会出现问题,可以使用两个变量来处理。 解决方案步骤
让我们将上述步骤转换为逻辑。 伪代码 上述方法的时间复杂度为O(m*n),因为我们遍历了第一行和第一列,即O(m)和 O(n),遍历并更新矩阵,即O(m*n),最后更新第一行和第一列,即O(m) + O(n)。因此,时间复杂度为O(m*n)。我们没有为矩阵使用辅助数组,因此空间复杂度为O(1)。 Java 程序设置矩阵零点以下 Java 程序使用额外的空间将元素设置为零。 SetMatrixZeros.java 输出 ![]() 让我们看另一个 Java 程序,其中我们没有使用辅助空间将矩阵元素设置为零。 SetMatrixToZero.java 输出 ![]() 让我们使用 Set 来解决同一个问题。 SetMatrixElementsToZero.java 输出 ![]() 我们观察到在上述方法中,我们没有使用任何额外的空间。因此,这是一种有效的方法。在设置矩阵为零时,我们必须考虑这一点。 下一个主题在 Java 中查找岛屿数量 |
Java 是世界上最流行的编程语言之一,它提供了丰富的特性,使开发人员能够编写强大而高效的代码。其中一项功能就是创建复合语句的能力。复合语句,也称为块语句,在...
5 分钟阅读
给定字符串 str,我们的任务是编写一个 Java 程序来确定提供的字符串是否为 pangram(全字母句)。如果字符串不区分大小写(大写或小写)而包含所有字母字符,则该字符串称为……
阅读 6 分钟
如何使用Java递增和递减日期?更改日期,无论是通过递增还是递减,都是Java中的一个典型操作。它涉及通过添加或删除特定天数、周数、月数或年数来更改日期。值得庆幸的是,Java附带了可以...的库。
阅读 4 分钟
? 在 Java 编程中,枚举(enumeration 的缩写)是一种特殊的类型,它允许你定义一组固定的命名常量。枚举常量本质上是预定义的,可以用来表示一组特定的值,例如一周中的几天……
阅读 10 分钟
给定一个整数 'N'。我们的任务是找出大小等于 N 的二进制字符串的总数,这些字符串不包含连续的 1。示例 1:输入:int N = 4 输出:8 说明:对于 N 等于 4,我们有以下...
阅读9分钟
在编程语言的世界里,Java 是最流行和通用的选择之一。Java 的一个关键特性是其可移植性,允许开发人员编写一次代码,并在任何地方运行。这种可移植性……
阅读 4 分钟
问题如下:给定一个整数序列,您需要找出序列中缺失的最小正整数。序列中也可能包含重复的元素,以及负数,甚至……
5 分钟阅读
在 Java 编程的错综复杂的结构中,静态绑定和动态绑定的概念在决定方法的行为及其调用方面起着关键作用。这些绑定机制控制方法调用与其实现的链接,影响了...
阅读 3 分钟
在本节中,我们将学习自守数及其示例,并创建 Java 程序来检查数字是否为自守数。什么是自守数?如果一个数字的平方以该数字本身结尾,则称该数字为自守数。
阅读 3 分钟
在 Java 编程的世界里,开发人员经常会遇到需要确定线程状态的情况。了解线程是处于活动状态还是已完成执行,对于高效的线程管理至关重要。在这种情况下,isAlive() 方法就会出现……
阅读 4 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India