Linked List Components in Java2025年5月10日 | 阅读 4 分钟 给定一个单链表的头节点和一个表示节点值子集的整数数组 G。任务是确定链表中包含 G 中值的连接组件的数量。 示例 1 ![]() 输入 链表:0 -> 1 -> 2 -> 3 子集 G = {0, 1, 3} 输出 2 解释: 组件 {0, 1} 和 {3} 是分开的,因为 2 不在 G 中,中断了连续性。 示例 2 ![]() 输入 链表:0 -> 1 -> 2 -> 3 -> 4 子集 G = {0, 3, 1, 4} 输出 2 解释: 组件 {0, 1} 和 {3, 4} 是分开的,因为 2 不在 G 中,中断了连续性。 示例 3 输入 链表:1 -> 2 -> 3 -> 4 -> 5 子集 G = {2, 3, 4} 输出 1 解释: 节点 {2, 3, 4} 在列表中是连续的,形成一个连接组件。 方法 1:使用 HashSet 方法HashSet 方法用于检查节点值是否属于给定的子集 G。 算法步骤 1: 将 G 的所有值存储在 HashSet 中。 步骤 2: 遍历链表并检查当前节点的值是否存在于 HashSet 中。 步骤 3: 如果当前节点在 G 中,并且其下一个节点不在 G 中(或为 null),则将计数加一,因为它标志着一个连接组件的结束。 步骤 4: 移动到下一个节点并继续该过程。 步骤 5: 返回连接组件的总数。 输出 2 时间复杂度: 程序的 O(n)。这是因为我们遍历了链表一次。 空间复杂度: 程序的 O(k)。这是因为 HashSet 最多存储 G 中的 k 个元素。 方法 2:排序和二分查找方法在排序数组 G 上使用二分查找,以有效地确定节点值是否是子集的一部分。我们遍历链表,通过检查 G 中的连续节点来计算连接组件的数量。 算法步骤 1: 对数组 G 进行排序,以便使用二分查找进行快速查找。 步骤 2: 初始化一个计数变量来跟踪组件的数量。 步骤 3: 遍历链表 步骤 3.1: 使用二分查找 (Arrays.binarySearch()) 检查当前节点是否在 G 中。 步骤 3.2: 如果开始了一个新组件(节点在 G 中,但前一个不在),则增加计数。 步骤 3.3: 如果节点不在 G 中,则标记组件的结束。 步骤 4: 返回连接组件的最终计数。 输出 2 时间复杂度: 程序的 O(n log k)。这是因为排序需要 O(k log k),遍历链表需要 O(n),二分查找需要 O(log k)。 空间复杂度: 程序的 O(1)。这是因为除了输入存储之外,没有使用额外的空间。 下一个主题Dijkstra 算法 Java |
Java 是一种广受好评的编程语言,以其强大的面向对象设计而著称。使 Java 与众不同的一项不可或缺的组件是它对静态方法的利用。这些重要的工具使开发人员能够创建实用函数、访问类级别的变量并优化代码执行。贯穿...
阅读 4 分钟
数字序列程序是编码挑战、竞争性编程甚至现实世界应用程序的常见且重要的组成部分。它们涉及生成或查找数字序列中的模式,这使得它们成为任何 Java 程序员的宝贵技能。在本节中,我们将探讨数字……
5 分钟阅读
Java 字节码是 JVM 理解的 Java 代码指令集。Java 程序编译后,会为其代码生成字节码。简单来说,Java 字节码就是 .class 文件形式的机器码。用...
5 分钟阅读
在计算机科学中,特别是在密码学、数论和竞赛编程中,在大型模数下乘以大整数是一个关键问题。在处理大数时,直接乘法可能导致整数溢出或计算效率低下。为了解决这个问题,使用模运算...
5 分钟阅读
查找最小后缀翻转的问题涉及处理两个二进制字符串:初始字符串 s 和目标字符串 target。在这里,两个字符串的长度都为 n,并且初始字符串 s 是一个全零字符串(即,s = "000....
阅读 12 分钟
在 Java 编程中,处理文件是开发人员经常遇到的常见任务。无论是从文件读取还是写入文件,选择要处理的特定文件,还是管理与文件相关的操作,拥有与文件系统交互的简单方法都至关重要。Java 的 FileDialog 类提供了……
阅读 8 分钟
Java 是一种灵活且流行的编程语言,开发人员可以在其中编写、调试和优化代码,而无需担心任何特定的硬件或其他技术。在本节中,我们将讨论 Java 命令和工具,探讨它们的特性以及它们如何帮助...
5 分钟阅读
java.nio.DoubleBuffer 有一个 allocate() 函数。使用 DoubleBuffer 类在当前缓冲区旁边分配一个新的双缓冲区。新缓冲区的起始位置将为零。它的容量将是它的限制。它将有一个不明确的标记。它的所有元素都将...
阅读 2 分钟
java.nio.charset 的一个内置方法是 maxBytesPerChar()。对于每个输入字符,CharsetEncoder 返回将创建的最大字节数。使用该值可以确定给定输入句子在最坏情况下的输出缓冲区大小...
阅读 2 分钟
在编程中,将一种类型转换为另一种类型是一个关键任务。有时我们需要将一种类型转换为另一种类型。在 Java 转换部分,我们已经讨论了各种类型的转换。在本节中,我们可以讨论如何将十六进制转换为...
7 分钟阅读
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India