Python中的岛屿数量问题2025 年 1 月 5 日 | 阅读 14 分钟 在这个问题中,我们将得到一个只包含 1 和 0 的二维矩阵。在这个二进制矩阵中,0 被认为是水,1 被认为是岛。一个岛被认为是周围有 4 个方向的水环绕的 1 的一组。一个岛可以由通过 4 个方向连接的 1 构成(请注意,对角线上的 1 不会被考虑在同一组中)。 在这个问题中,我们将得到一个只包含 1 和 0 的二维矩阵。在这个二进制矩阵中,0 被认为是水,1 被认为是岛。一个岛被认为是周围有 4 个方向的水环绕的 1 的一组。一个岛可以由通过 4 个方向连接的 1 构成(请注意,对角线上的 1 不会被考虑在同一组中)。 并且整个矩阵假定被水环绕。 让我们通过一个例子来理解这一点。 输入: 矩阵 = [[1, 1, 1, 0, 0], 1, 1, 0, 1, 1], [1, 0, 0, 1, 0], [0, 1, 0, 0, 0]] 输出 3 在这个 2D 矩阵中,有 3 组 1。第一组位于左上角列,从行 0 到 2,从列 0 到 2。第二组位于行 1 到 2,从列 3 到 4。第三组是位于索引 (2, 2) 的孤立的 1。请注意,最后一个元素不能被视为第 1 组的一部分,因为它仅通过对角线连接到第 1 组的元素。 我们将使用图数据结构的连通分量概念来解决这个问题。为了解决这个问题,首先我们需要理解图中的连通分量是什么。图是一种数据结构,其中存在一定数量的顶点,通过一定数量的边连接。然而,一个图可以分成几个分量,但仍然被认为是一个图。当图中的任何一个簇的节点不与任何其他簇的节点连接时,就会发生这种情况。下面是一个图的连通分量的示例 在上面的例子中,一个图有两个分量。 一个所有顶点都连接并且可以在一次遍历中到达所有顶点的图,被称为具有单个分量。这种类型的图称为强连通图。然而,如果我们需要多次遍历迭代才能到达图的所有顶点,那么该图就被称为具有多个分量。 可以使用深度优先搜索 (DFS) 和广度优先搜索 (BFS) 算法遍历图。我们将使用这两种遍历来解决这个问题。 解决问题的核心思想是定义两个函数,一个用于遍历,另一个用于计算遍历次数。在第二个函数中,我们将创建一个与给定矩阵大小相同的矩阵,并在所有元素的位置上填充 False。现在,我们将运行一个嵌套的 for 循环遍历数组的每个元素,每当遇到一个在给定矩阵中为 1 并且在 visited 数组中标记为 False 的元素时,简而言之,就是未访问的元素,我们将调用遍历函数。在此循环中,我们必须计算调用遍历函数的次数。在遍历函数中,每个访问过的矩阵单元格将在 visited 矩阵的相应索引处被标记为 True。遍历函数被调用的次数就是我们的解决方案。这个数字代表了在这个问题中未连接分量或岛屿的数量。 方法 - 1在此方法中,我们将使用 DFS 遍历来遍历矩阵。思路与上述相同。我们将创建一个矩阵来跟踪已访问的顶点。 让我们来看一下这个问题的算法
以下是使用 DFS 遍历的这种方法的 Python 代码。 代码 输出 The number of islands in the given matrix is: 3 时间复杂度:我们在 countIslands() 函数中访问矩阵的每个单元格。因此,时间复杂度是非线性的,即 O(r x c),其中 r 是给定矩阵的总行数,c 是列数。 辅助空间:我们创建了一个矩阵来存储已访问的单元格;因此,空间复杂度为 O(r x c)。 上述问题可以修改为使对角线元素也构成一个岛屿。在这种情况下,我们需要在对角线元素上也调用递归 DFS 遍历函数,如果对角线元素有效的话。我们将把 DFS 遍历的 row[] 和 column[] 矩阵中的索引包含进去,这样每个特定元素将检查 8 个索引而不是 4 个。 以下是更新问题的代码。 代码 输出 The number of islands in the given matrix is: 3 空间优化在上述算法中,我们创建了一个单独的矩阵来存储已访问的节点。我们可以通过就地解决此问题来优化空间复杂度,这样我们就不需要额外的 O(r * c) 空间。 以下是空间优化的代码。 代码 输出 The number of islands in the given matrix is: 3 方法 - 2在此方法中,我们将使用 BFS 算法。邻居被认为是单元格的非对角线元素。因此,总共有 4 个邻居。因此,在此问题中,我们将不对所有相邻单元格使用 BFS;相反,我们将对 4 个相邻单元格使用 BFS。我们将跟踪已访问的单元格,以确保我们不会再次访问它们。 以下是此问题的算法方法
代码 输出 Number of islands in the given matrix is: 5 时间复杂度: O(ROW * COL),其中 ROW 是矩阵的行数,COL 是列数。 辅助空间: O(ROW * COL),因为有 visited 数组。 下一主题Pandas 中的管道 |
什么是情感分析?情感分析是一种用于判断一段文本情感基调的方法。它帮助我们将文本分类为积极、消极或中性,以了解人们对某个特定话题的感受。它有时也被称为“观点挖掘”,是...
5 分钟阅读
在大多数情况下,处理许多与编程相关的任务,特别是处理庞大的数据集,需要创建能够高效地存储、管理和检索大量数据的数据库。解决此类任务的例子通常涉及 Oracle 或 MySQL 数据库....
11 分钟阅读
贪婪算法是一类优化算法,它在每一步都做出局部最优选择,以期找到全局最优解。它们广泛应用于计算机科学、数学和工程等各个领域,以解决各种各样的问题...
阅读9分钟
在 Python 中,“os.kill()”方法是“os”模块中的一个函数,可让您向进程传递信号。它对于在 Python 程序内部管理和控制进程非常方便。此方法允许您与操作系统相关的进程功能进行交互...
阅读 4 分钟
基于颜色的特征用于物体检测是一种简单的方法,它利用感兴趣物体的独特颜色特性来识别其在图像或视频中的位置。该过程包括图像过滤,使用复制功能掩盖感兴趣的物体...
阅读 8 分钟
Python 的 simple_salesforce 库简介 simple_salesforce 库是一个 Python 包,它提供了一种与 Salesforce REST API 通信的简单方法。通过抽象 API 调用的复杂性,它允许开发人员专注于编写代码而不是管理原始 HTTP 请求。关键...
阅读 4 分钟
Python 中的导入充当了一个主要系统,用于在程序中访问来自不同文档、模块或包的代码。它们能够重用代码,并有助于将大型项目组织成合理的单元。让我们分解 Python 导入的关键部分:是什么……
阅读 8 分钟
简介 Python 以其易于理解和通用性而闻名,它提供了系统管理相关工作所需的丰富内置函数和模块。其中一个函数是 os,它是 Python 中的 shell 命令处理器。它可以从脚本执行 shell 命令。本详细教程将...
阅读 4 分钟
? Python 用于数据分析、AI 和 Web 脚本,它拥有无数使处理数据库变得容易的库。然而,Python 并不原生支持 JDBC(Java 数据库连接),这是 Java 应用程序中常见的数据库访问方式。幸运的是,有办法...
7 分钟阅读
动态规划 (DP) 是一种算法技术,通过将计算和数学问题分解为更小、重叠的子问题来解决它们。DP 对于优化问题非常有效,在这些问题中,您希望在众多可能的选项中找到最佳答案,例如找出最短路径、...
阅读9分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India