Java 中查找岛屿的数量17 Mar 2025 | 6 分钟阅读 查找岛屿数量问题是标准问题,通常在顶尖公司的编码轮面试中被问到。这个问题基于图论。在图论中,我们查找连通分量的数量。在这个问题中,我们也需要做同样的事情。因此,在本节中,我们将讨论岛屿问题陈述、算法以及查找岛屿数量的 Java 程序。 问题陈述在这个问题中,岛屿只不过是布尔一维、二维或多维 (n 维) 数组中相连的“1”的集合。在这个问题中,我们需要查找布尔矩阵中岛屿(“1”的集合)的数量。“1”表示陆地。 陈述可以重写如下。 给定一个布尔二维矩阵,其中“1”表示陆地,“0”表示水。在这个矩阵中,我们需要计算岛屿的数量。岛屿是环绕着水并且由水平或垂直相邻陆地连接而形成的区域。假设网格的所有四个边缘都环绕着水。下图描绘了这一点。 ![]() 在上图中,用绿色突出显示的方块(“1”)表示陆地,用黄色突出显示的方块(“0”)表示水。上述矩阵有五个岛屿。 上述问题与无向图中的连通分量有关。因此,我们首先将理解什么是连通分量。 连通分量连通分量是指图中的每对节点都可以通过路径相互连接,并且不与子图之外的任何其他顶点连接。例如,考虑以下图。 ![]() 示例 考虑以下矩阵。 ![]() 在上图中,只有一个相连的“1”的集合。因此,它表示只有一个岛屿。 问题解决方案这个问题有许多解决方案。它可以是使用 DFS 或 BFS 来解决。在本节中,我们将使用递归和非递归的 DFS 方法来解决这个问题。 使用深度优先搜索 (DFS)在这种方法中,我们将逐一遍历矩阵中的所有陆地(“1”)。如果我们发现任何未遍历或尚未访问过的陆地,这意味着我们找到了一个新的岛屿。一旦我们访问了一个岛屿,我们将岛屿数量加 1。使用 DFS 或 BFS,我们将所有相连的陆地标记为已访问。 算法
查找岛屿数量的 Java 程序递归方法在以下 Java 程序中,我们维护了一个名为visited的数组。它跟踪我们已经访问过的陆地。定义并初始化一个变量answer,它存储岛屿的数量。 让我们在 Java 程序中实现上述方法。 NumberOfIslands.java 输出 Number of Islands: 3 使用非递归方法NumberOfIslands.java 输出 Number of Islands: 5 复杂度对于上述问题,时间复杂度为O(n*m),因为我们至少访问了网格的每个元素一次。其中,n 是行数,m 是列数。 上述方法空间复杂度为O(n*m),因为我们使用了一个二维数组来存储陆地是否已被访问。 下一主题Java 中的平衡素数 |
顾名思义,常量是编程中一个不变的实体。换句话说,它的值不能被改变。通常,为了实现这一点,变量会使用 final 关键字声明。常量经常用于表示稳定的值,例如数学...
阅读 6 分钟
在 Java 编程的世界中,有许多场景可能需要计算给定字符串中不同字符的数量。无论我们是开发文本分析工具、文字游戏,还是任何处理文本数据的应用程序,了解如何……
阅读 4 分钟
在 Java 中,所有给定序列的最长公共子序列称为。使用 LCS 的原因是限制子序列的元素在原始序列中占据连续的位置。在原始序列中以相同相对...的序列。
阅读 4 分钟
Java 中的递归是一个函数/方法不断调用自身的进程。在编程语言中,如果程序允许我们在相同的方法名称内调用一个方法,则称为递归调用。它使代码最小化,但具有挑战性...
阅读 4 分钟
在 Java 中比较字符串时,了解 == 运算符和 .equals() 方法之间的区别非常重要。在 Java 中,字符串是一个对象,比较对象需要考虑您是想比较它们的引用(内存地址)还是它们的实际内容。== 运算符...
5 分钟阅读
多项式乘法是学习代数或计算机科学的人都需要知道的,它被用于信号处理、控制系统和计算代数等领域。这可能涉及两个多项式,并将这两个多项式相乘,并将项加到结果中...
5 分钟阅读
Getter 和 setter 方法在 Java 编程中经常使用。Java 中的 Getter 和 setter 方法广泛用于访问和操作类字段的值。通常,类字段使用私有访问说明符进行修饰。因此,要访问它们,需要公共访问说明符...
阅读 10 分钟
Stern-Brocot 序列是一个迷人的数学结构,它源于数论,并提供了一种系统的方法来枚举所有以最简形式表示的正有理数。该序列以 Moritz Stern 和 Achille Brocot 命名,在计算机科学、连分数甚至机械……
阅读 6 分钟
组合学的基本思想是排列是集合项在多种顺序下的排列。我们将通过几种在 Java 中创建排列的技术,并附带代码示例和详细解释。排列是如何发生的?排列是元素在特定...
阅读 6 分钟
双生素数是相差2的两个素数。素数之间的差为2的素数被称为双生素数。双生素数一词用于一对双生素数。……
5 分钟阅读
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India