349. 两个数组的交集
发布人:shili8
发布时间:2024-12-22 15:33
阅读次数:0
**两个数组的交集**
在计算机科学中,两个数组的交集是指两个集合中同时存在的元素。这个问题经常出现在数据处理、信息检索等领域。在本文中,我们将讨论如何求两个数组的交集,并提供相关代码示例。
**算法思路**
求两个数组的交集可以使用以下步骤:
1. 将两个数组合并成一个集合。
2. 使用集合中的元素来构建一个新的集合,这个新集合包含了两个原始集合中同时存在的元素。
**Python代码示例**
def intersection(arr1, arr2): """ Returns the intersection of two arrays. Parameters: arr1 (list): The first array. arr2 (list): The second array. Returns: list: The intersection of arr1 and arr2. """ # Convert the lists to sets for efficient lookup set1 = set(arr1) set2 = set(arr2) # Use the & operator to find the intersection intersection_set = set1 & set2 # Convert the result back to a list result = list(intersection_set) return result# Example usage: arr1 = [1,2,3,4,5] arr2 = [4,5,6,7,8] print(intersection(arr1, arr2)) # Output: [4,5]
**Java代码示例**
javaimport java.util.*; public class Main { public static Setintersection(int[] arr1, int[] arr2) { // Convert the arrays to sets for efficient lookup Set set1 = new HashSet<>(); for (int num : arr1) { set1.add(num); } Set set2 = new HashSet<>(); for (int num : arr2) { set2.add(num); } // Use the retainAll method to find the intersection set1.retainAll(set2); return set1; } public static void main(String[] args) { int[] arr1 = {1,2,3,4,5}; int[] arr2 = {4,5,6,7,8}; Set result = intersection(arr1, arr2); System.out.println(result); // Output: [4,5] } }
**时间复杂度分析**
* 将两个数组合并成一个集合的时间复杂度为 O(n + m),其中 n 和 m 是两个数组中的元素数量。
* 使用集合中的元素来构建一个新的集合的时间复杂度为 O(min(n, m)),因为我们只需要遍历较小集合中的元素。
* 总体而言,求两个数组的交集的时间复杂度为 O(n + m)。
**空间复杂度分析**
* 需要额外的空间来存储两个集合和新的集合,因此空间复杂度为 O(n + m)。
综上所述,求两个数组的交集是一个高效且有效的算法,可以在 O(n + m) 的时间复杂度下完成。