Java 中两个排序数组的并集和交集2025年3月21日 | 阅读 9 分钟 两个有序数组的并集和交集是计算机科学和数据分析中的基本操作。在 Java 中,可以通过利用两个有序数组固有的顺序来高效地执行这些操作。两个数组的并集是两个数组中所有元素的集合,而交集是两个数组共有的所有元素的集合。这些操作通常用于各种应用,包括数据库管理、信息检索和统计。 并集在 Java 中,可以通过合并两个数组并删除重复项来获得两个有序数组的并集。这是编程中常见的操作,通常用于合并两个列表或查找两个列表之间的公共元素等任务。并集操作将两个数组的元素合并到一个新数组中,该数组包含来自两个数组的所有唯一元素。 给定两个有序数组,找出它们的并集和交集。 示例 1 输入 arr1[] = {2, 5, 6} arr2[] = {4, 6, 8, 10} 输出 并集:{2, 4, 5, 6, 8, 10} 交集:{6} 示例 2 输入 arr1[] = {2, 3, 6, 7, 9} arr2[] = {1, 3, 5, 6, 8} 输出 并集:{1, 2, 3, 5, 6, 7, 8, 9} 交集:{3, 6} 示例 3 输入 arr1[] = {4, 6, 8, 10} arr2[] = {1, 2, 4, 5, 8} 输出 并集:{1, 2, 4, 5, 6, 8, 10} 交集:{4, 8} 方法:数组 arr1[] 和 arr2[] 的并集两个数组 arr1[] 和 arr2[] 的并集是一个新数组,其中包含来自两个数组的所有不重复元素。要获得两个有序数组的并集,我们可以使用双指针方法遍历数组并将元素添加到并集数组中。 算法
实施 文件名:ArrayUnion.java 输出 Union of two arrays: 1 2 3 4 5 6 7 8 复杂度分析 代码的时间复杂度为 O(m+n),其中 m 和 n 是两个输入数组的长度。这是因为迭代两个数组的 while 循环最多有 m+n 次迭代,因为每次迭代都会递增 i 或 j 指针,直到其中一个数组完全遍历。 空间复杂度也为 O(m+n),因为使用的唯一额外空间是用于变量 i、j、m 和 n 以及打印的输出。 方法:使用 Set使用 Set 的方法是查找两个有序数组并集的简单有效方法。通过将两个数组中的所有元素插入 Set 中,重复项会自动删除,生成的 Set 包含来自两个数组的所有唯一元素。 文件名:UnionOfSortedArrays.java 输出 1 2 3 4 5 6 7 8 9 10 复杂度分析:给定代码的时间复杂度为 O(mlog(m) + nlog(n)),其中 m 和 n 是输入数组 arr1 和 arr2 的长度。通过将两个数组的所有元素添加到 TreeSet(使用自平衡二叉搜索树实现)中,可以提高时间复杂度。TreeSet 的 add() 操作的时间复杂度为 O(log(n)),其中 n 是 Set 的大小。 代码的空间复杂度为 O(m+n),因为我们使用 TreeSet 来存储两个数组的唯一元素,并且 Set 的大小最多为 m+n。 方法:使用 HashMap两个有序数组的并集可以在 Java 中使用 HashMap 来实现,以有效地存储和检索数组的元素,同时删除重复项。该方法涉及使用两个指针遍历数组,将元素添加到 HashMap,然后将 HashMap 的键作为两个数组的并集返回。 文件名:UnionOfSortedArrays.java 输出 [1, 2, 3, 4, 5, 6, 7] 复杂度分析:算法的时间复杂度为 O(m+n),其中 m 和 n 是两个输入数组的长度。将元素添加到 HashMap 和检索其键的复杂度是恒定的 O(1),这有助于算法的整体效率,因为它只遍历两个数组一次。 算法的空间复杂度也为 O(m+n),因为 HashMap 和 ArrayList 的大小最多为两个输入数组的总大小。数组 arr1[] 和 arr2[] 的交集 交集交集是计算机科学中常见的集合运算,涉及查找两个集合之间的公共元素。在 Java 中,可以通过迭代一个数组的每个元素并检查它是否存在于另一个数组中来找到两个数组的交集。生成的数组将包含同时存在于两个数组中的元素。 方法:数组 arr1[] 和 arr2[] 的交集算法 要找到两个数组 arr1 和 arr2 的交集,我们可以遵循以下步骤
实施 文件名:IntersectionOfArrays.java 输出 [3, 4, 5] 复杂度分析:程序的 time complexity 为 O(m + n),程序的 space complexity 为 O(min(m, n)。 方法:使用 Tree Set此方法的主要目标是创建一个使用 tree set 的数据结构,该数据结构可以包含在 arri[] 中找到的所有不重复元素。然后将 arr2[] 的元素与 tree set 进行比较,并检查是否将其视为交集以避免重复。 文件名:TreeSetDemo.java 输出 2 3 4 5 复杂度分析:findIntersection 方法的时间复杂度为 O(nlogn),因为它涉及将 n 个元素添加到两个 TreeSet 中,这需要 O(nlogn) 的时间复杂度,然后使用 retainAll 方法查找交集,这在平均情况下需要 O(n) 的时间复杂度。 findIntersection 方法的 overall space complexity 为 O(n),因为它涉及创建三个大小为 n 的集合,这需要 O(n) 的空间复杂度。 下一个主题Java 向量操作 |
在本节中,我们将讨论如何创建用于购物账单的 Java 程序。要生成购物账单,我们需要产品 ID、名称、数量、单价和产品的总价,以及总计金额。除了产品详细信息外,我们还可以添加……
阅读 12 分钟
Java 中的链表中大于节点给定一个整数链表 L,任务是返回一个包含提供的链表中每个元素更大元素的整数链表。如果没有元素更大...
阅读 6 分钟
在 Java 中,读写 Excel 文件有点棘手,因为 Excel 工作表有单元格来存储数据。Java 不提供直接读取或写入 Microsoft Excel 或 Word 文档的 API。我们必须依赖第三方库,该库...
阅读 3 分钟
在计算问题中,在二进制矩阵中查找最大矩形是经典的挑战性问题,它测试了对动态规划和基于堆栈的方法的理解。该问题通常出现在图像处理、计算机视觉甚至游戏开发等各种领域。在此...
阅读 6 分钟
? 我们可以使用带范围的下界和上界的条件语句来检查 Java 中是否存在范围内的整数。要检查整数是否存在于某个范围内,我们可以按照以下步骤进行:定义范围(开始和结束)值。比较整数...
阅读 6 分钟
在 Java 编程世界中,处理 HTTP 请求和响应对于应用程序开发至关重要。HttpEntity 类是处理 HTTP 请求和响应时的关键组件,它允许我们读写 HTTP 连接中的数据。在本节中,我们将...
阅读 4 分钟
在 Java 中,mapToDouble() 方法是 Stream 接口的成员之一,该接口在 Java 8 中引入。它通过将给定的 ToDoubleFunction 应用于每个元素,将流的元素转换为原始双精度值,从而提供了一种高效的...
阅读 10 分钟
在 Java 编程中,“找不到符号”错误意味着编译器无法识别代码中使用的特定标识符,例如变量名或方法名。当您尝试使用未正确声明的变量、方法、类或其他标识符时,会出现此错误...
阅读 10 分钟
? 在 Java 中,从方法返回二维数组在处理复杂数据结构或执行各种数据操作任务时可能是一项有用的操作。在本节中,我们将深入探讨如何在 Java 中返回二维数组的详细信息,并提供分步……
阅读 6 分钟
这个问题简单地称为 Trapping Rain Water,它是著名的经典算法问题之一,涉及估算一系列连续的山丘(以条形图的形式表示)之间捕获的雨水量,其高度可能各不相同。如果描述...
5 分钟阅读
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India