多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 查找两个未排序数组的并集和交集 > 原文: [https://www.geeksforgeeks.org/find-union-and-intersection-of-two-unsorted-arrays/](https://www.geeksforgeeks.org/find-union-and-intersection-of-two-unsorted-arrays/) 给定两个表示两个集合的未排序数组(每个数组中的元素都不同),找到两个数组的并集和交集。 例如,如果输入数组为: arr1 [] = {7,1,5,2,3,6} arr2 [] = {3,8,6,20,7} 然后,您的程序应将 Union 打印为{1,2,3,5,6,7,8,20},并将 Intersection 打印为{3,6,7}。 请注意,并集和相交的元素可以按任何顺序打印。 **方法 1(朴素)** ***联合**:* 1)将联合 U 初始化为空。 2)将第一个数组的所有元素复制到 U。 3)对第二个数组的每个元素 x 执行以下操作: …..a)如果第一个数组中不存在 x,则将 x 复制到 U. 4)返回 U。 ***交集**:* 1)将交集 I 初始化为空。 2)对第一个数组 的每个元素 x 执行以下操作……..a)如果第二个数组中存在 x,则将 x 复制到 I。 4)返回 I。 对于两种操作,此方法的时间复杂度均为 O(mn)。 其中,m 和 n 分别是 arr1 []和 arr2 []中的元素数。 **方法 2(使用排序)** 1)对 arr1 []和 arr2 []进行排序。 此步骤需要 O(mLogm + nLogn)时间。 2)使用 [O(m + n)算法找到两个排序数组](https://www.geeksforgeeks.org/union-and-intersection-of-two-sorted-arrays-2/)的并集和交集。 此方法的总时间复杂度为 O(mLogm + nLogn)。 **方法 3(使用排序和搜索)** ***联合**:* 1)将联合 U 初始化为空。 2)找到 m 和 n 中的较小者,并对较小的数组进行排序。 3)将较小的数组复制到 U。 4)对于较大数组的每个元素 x,请按照 进行…….b)在较小数组中二分搜索 x。 如果 x 不存在,则将其复制到 U。 5)返回 U。 ***交集**:* 1)将交集 I 初始化为空。 2)找到 m 和 n 中的较小者,并对较小的数组进行排序。 3)对于较大数组的每个元素 x,请按照 …….b)在较小数组中进行二分搜索 x。 如果存在 x,则将其复制到 I。 4)返回 I。 该方法的时间复杂度是 min(mLogm + nLogm,mLogn + nLogn),也可以写成 O((m + n)Logm,(m + n)Logn)。 当两个数组的大小之间的差异很大时,此方法比以前的方法要好得多。 感谢 [use_the_force](https://disqus.com/by/use_the_force/) 在此处的注释[中建议了此方法。](https://www.geeksforgeeks.org/union-and-intersection-of-two-sorted-arrays-2/) 下面是此方法的实现。 ## C++ ```cpp // A C++ program to print union and intersection  /// of two unsorted arrays #include <iostream> #include <algorithm> using namespace std; int binarySearch(int arr[], int l, int r, int x); // Prints union of arr1[0..m-1] and arr2[0..n-1] void printUnion(int arr1[], int arr2[], int m, int n) {     // Before finding union, make sure arr1[0..m-1]      // is smaller     if (m > n)     {         int *tempp = arr1;         arr1 = arr2;         arr2 = tempp;         int temp = m;         m = n;         n = temp;     }     // Now arr1[] is smaller     // Sort the first array and print its elements (these two     // steps can be swapped as order in output is not important)     sort(arr1, arr1 + m);     for (int i=0; i<m; i++)         cout << arr1[i] << " ";     // Search every element of bigger array in smaller array     // and print the element if not found     for (int i=0; i<n; i++)         if (binarySearch(arr1, 0, m-1, arr2[i]) == -1)             cout << arr2[i] << " "; } // Prints intersection of arr1[0..m-1] and arr2[0..n-1] void printIntersection(int arr1[], int arr2[], int m, int n) {     // Before finding intersection, make sure arr1[0..m-1]      // is smaller     if (m > n)     {         int *tempp = arr1;         arr1 = arr2;         arr2 = tempp;         int temp = m;         m = n;         n = temp;     }     // Now arr1[] is smaller     // Sort smaller array arr1[0..m-1]     sort(arr1, arr1 + m);     // Search every element of bigger array in smaller     // array and print the element if found     for (int i=0; i<n; i++)         if (binarySearch(arr1, 0, m-1, arr2[i]) != -1)             cout << arr2[i] << " "; } // A recursive binary search function. It returns  // location of x in given array arr[l..r] is present,  // otherwise -1 int binarySearch(int arr[], int l, int r, int x) {     if (r >= l)     {         int mid = l + (r - l)/2;         // If the element is present at the middle itself         if (arr[mid] == x)  return mid;         // If element is smaller than mid, then it can only         // be presen in left subarray         if (arr[mid] > x)            return binarySearch(arr, l, mid-1, x);         // Else the element can only be present in right subarray         return binarySearch(arr, mid+1, r, x);     }     // We reach here when element is not present in array     return -1; } /* Driver program to test above function */ int main() {     int arr1[] = {7, 1, 5, 2, 3, 6};     int arr2[] = {3, 8, 6, 20, 7};     int m = sizeof(arr1)/sizeof(arr1[0]);     int n = sizeof(arr2)/sizeof(arr2[0]);     cout << "Union of two arrays is n";     printUnion(arr1, arr2, m, n);     cout << "nIntersection of two arrays is n";     printIntersection(arr1, arr2, m, n);     return 0; } ``` ## Java ```java // A Java program to print union and intersection  /// of two unsorted arrays import java.util.Arrays; class UnionAndIntersection  {     // Prints union of arr1[0..m-1] and arr2[0..n-1]     void printUnion(int arr1[], int arr2[], int m, int n)      {         // Before finding union, make sure arr1[0..m-1]          // is smaller         if (m > n)          {             int tempp[] = arr1;             arr1 = arr2;             arr2 = tempp;             int temp = m;             m = n;             n = temp;         }         // Now arr1[] is smaller         // Sort the first array and print its elements (these two         // steps can be swapped as order in output is not important)         Arrays.sort(arr1);         for (int i = 0; i < m; i++)             System.out.print(arr1[i] + " ");         // Search every element of bigger array in smaller array         // and print the element if not found         for (int i = 0; i < n; i++)          {             if (binarySearch(arr1, 0, m - 1, arr2[i]) == -1)                 System.out.print(arr2[i] + " ");         }     }     // Prints intersection of arr1[0..m-1] and arr2[0..n-1]     void printIntersection(int arr1[], int arr2[], int m, int n)      {         // Before finding intersection, make sure arr1[0..m-1]          // is smaller         if (m > n)          {             int tempp[] = arr1;             arr1 = arr2;             arr2 = tempp;             int temp = m;             m = n;             n = temp;         }         // Now arr1[] is smaller         // Sort smaller array arr1[0..m-1]         Arrays.sort(arr1);         // Search every element of bigger array in smaller array         // and print the element if found         for (int i = 0; i < n; i++)          {             if (binarySearch(arr1, 0, m - 1, arr2[i]) != -1)                  System.out.print(arr2[i] + " ");         }     }     // A recursive binary search function. It returns location of x in     // given array arr[l..r] is present, otherwise -1     int binarySearch(int arr[], int l, int r, int x)      {         if (r >= l)          {             int mid = l + (r - l) / 2;             // If the element is present at the middle itself             if (arr[mid] == x)                 return mid;             // If element is smaller than mid, then it can only              // be present in left subarray             if (arr[mid] > x)                 return binarySearch(arr, l, mid - 1, x);             // Else the element can only be present in right subarray             return binarySearch(arr, mid + 1, r, x);         }         // We reach here when element is not present in array         return -1;     }     // Driver program to test above functions     public static void main(String[] args)      {         UnionAndIntersection u_i = new UnionAndIntersection();         int arr1[] = {7, 1, 5, 2, 3, 6};         int arr2[] = {3, 8, 6, 20, 7};         int m = arr1.length;         int n = arr2.length;         System.out.println("Union of two arrays is ");         u_i.printUnion(arr1, arr2, m, n);         System.out.println("");         System.out.println("Intersection of two arrays is ");         u_i.printIntersection(arr1, arr2, m, n);     } } ``` ## Python3 ```py # A Python3 program to print union and intersection  # of two unsorted arrays # Prints union of arr1[0..m-1] and arr2[0..n-1] def printUnion(arr1, arr2, m, n):     # Before finding union, make sure arr1[0..m-1]      # is smaller     if (m > n):         tempp = arr1;         arr1 = arr2;         arr2 = tempp;         temp = m;         m = n;         n = temp;     # Now arr1[] is smaller     # Sort the first array and print its elements (these two     # steps can be swapped as order in output is not important)     arr1.sort();     for i in range(0,m):         print(arr1[i],end=" ");     # Search every element of bigger array in smaller array     # and print the element if not found     for i in range(0,n):         if (binarySearch(arr1, 0, m - 1, arr2[i]) == -1):             print(arr2[i],end=" "); # Prints intersection of arr1[0..m-1] and arr2[0..n-1] def printIntersection(arr1, arr2, m, n):     # Before finding intersection, make sure arr1[0..m-1]      # is smaller     if (m > n):         tempp = arr1;         arr1 = arr2;         arr2 = tempp;         temp = m;         m = n;         n = temp;     # Now arr1[] is smaller     # Sort smaller array arr1[0..m-1]     arr1.sort();     # Search every element of bigger array in smaller     # array and print the element if found     for i in range(0,n):         if (binarySearch(arr1, 0, m - 1, arr2[i]) != -1):             print(arr2[i],end=" "); # A recursive binary search function. It returns  # location of x in given array arr[l..r] is present,  # otherwise -1 def binarySearch(arr, l, r,x):     if (r >= l):         mid = int(l + (r - l)/2);         # If the element is present at the middle itself         if (arr[mid] == x):             return mid;         # If element is smaller than mid, then it can only         # be presen in left subarray         if (arr[mid] > x):             return binarySearch(arr, l, mid - 1, x);         # Else the element can only be present in right subarray         return binarySearch(arr, mid + 1, r, x);     # We reach here when element is not present in array     return -1; # Driver program to test above function  arr1 = [7, 1, 5, 2, 3, 6]; arr2 = [3, 8, 6, 20, 7]; m = len(arr1); n = len(arr2); print("Union of two arrays is "); printUnion(arr1, arr2, m, n); print("\nIntersection of two arrays is "); printIntersection(arr1, arr2, m, n); # This code is contributed by mits ``` ## C# ```cs // A C# program to print union and  // intersection of two unsorted arrays using System; class GFG { // Prints union of arr1[0..m-1] and arr2[0..n-1] static void printUnion(int []arr1, int []arr2,                                    int m, int n)  {     // Before finding union, make      // sure arr1[0..m-1] is smaller     if (m > n)      {         int []tempp = arr1;         arr1 = arr2;         arr2 = tempp;         int temp = m;         m = n;         n = temp;     }     // Now arr1[] is smaller     // Sort the first array and print     // its elements (these two steps can     // be swapped as order in output is      // not important)     Array.Sort(arr1);     for (int i = 0; i < m; i++)         Console.Write(arr1[i] + " ");     // Search every element of bigger      // array in smaller array and print      // the element if not found     for (int i = 0; i < n; i++)      {         if (binarySearch(arr1, 0, m - 1,                           arr2[i]) == -1)             Console.Write(arr2[i] + " ");     } } // Prints intersection of arr1[0..m-1]  // and arr2[0..n-1] static void printIntersection(int []arr1,                               int []arr2,                                int m, int n)  {     // Before finding intersection,      // make sure arr1[0..m-1] is smaller     if (m > n)      {         int []tempp = arr1;         arr1 = arr2;         arr2 = tempp;         int temp = m;         m = n;         n = temp;     }     // Now arr1[] is smaller     // Sort smaller array arr1[0..m-1]     Array.Sort(arr1);     // Search every element of bigger array in      // smaller array and print the element if found     for (int i = 0; i < n; i++)      {         if (binarySearch(arr1, 0, m - 1, arr2[i]) != -1)              Console.Write(arr2[i] + " ");     } } // A recursive binary search function.  // It returns location of x in given  // array arr[l..r] is present, otherwise -1 static int binarySearch(int []arr, int l,                          int r, int x)  {     if (r >= l)      {         int mid = l + (r - l) / 2;         // If the element is present at         // the middle itself         if (arr[mid] == x)             return mid;         // If element is smaller than mid, then it          // can only be present in left subarray         if (arr[mid] > x)             return binarySearch(arr, l, mid - 1, x);         // Else the element can only be          // present in right subarray         return binarySearch(arr, mid + 1, r, x);     }     // We reach here when element is     // not present in array     return -1; } // Driver Code static public void Main () {     int []arr1 = {7, 1, 5, 2, 3, 6};     int []arr2 = {3, 8, 6, 20, 7};     int m = arr1.Length;     int n = arr2.Length;     Console.WriteLine("Union of two arrays is ");     printUnion(arr1, arr2, m, n);     Console.WriteLine("");     Console.WriteLine("Intersection of two arrays is ");     printIntersection(arr1, arr2, m, n); } } // This code is contributed  // by Sach_Code ``` ## PHP ```php <?php // A PHP program to print union and intersection  /// of two unsorted arrays // Prints union of arr1[0..m-1] and arr2[0..n-1] function printUnion($arr1, $arr2, $m, $n) {     // Before finding union, make sure arr1[0..m-1]      // is smaller     if ($m > $n)     {         $tempp = $arr1;         $arr1 = $arr2;         $arr2 = $tempp;         $temp = $m;         $m = $n;         $n = $temp;     }     // Now arr1[] is smaller     // Sort the first array and print its elements (these two     // steps can be swapped as order in output is not important)     sort($arr1);     for ($i = 0; $i < $m; $i++)         echo $arr1[$i]." ";     // Search every element of bigger array in smaller array     // and print the element if not found     for ($i = 0; $i < $n; $i++)         if (binarySearch($arr1, 0, $m - 1, $arr2[$i]) == -1)             echo $arr2[$i]." "; } // Prints intersection of arr1[0..m-1] and arr2[0..n-1] function printIntersection($arr1, $arr2, $m, $n) {     // Before finding intersection, make sure arr1[0..m-1]      // is smaller     if ($m > $n)     {         $tempp = $arr1;         $arr1 = $arr2;         $arr2 = $tempp;         $temp = $m;         $m = $n;         $n = $temp;     }     // Now arr1[] is smaller     // Sort smaller array arr1[0..m-1]     sort($arr1);     // Search every element of bigger array in smaller     // array and print the element if found     for ($i = 0; $i < $n; $i++)         if (binarySearch($arr1, 0, $m - 1, $arr2[$i]) != -1)             echo $arr2[$i]." "; } // A recursive binary search function. It returns  // location of x in given array arr[l..r] is present,  // otherwise -1 function binarySearch($arr, $l, $r,$x) {     if ($r >= $l)     {         $mid = (int)($l + ($r - $l)/2);         // If the element is present at the middle itself         if ($arr[$mid] == $x) return $mid;         // If element is smaller than mid, then it can only         // be presen in left subarray         if ($arr[$mid] > $x)          return binarySearch($arr, $l, $mid - 1, $x);         // Else the element can only be present in right subarray         return binarySearch($arr, $mid + 1, $r, $x);     }     // We reach here when element is not present in array     return -1; } /* Driver program to test above function */     $arr1 = array(7, 1, 5, 2, 3, 6);     $arr2 = array(3, 8, 6, 20, 7);     $m = count($arr1);     $n = count($arr2);     echo "Union of two arrays is \n";     printUnion($arr1, $arr2, $m, $n);     echo "\nIntersection of two arrays is \n";     printIntersection($arr1, $arr2, $m, $n); // This code is contributed by mits ?> ``` **输出**: ``` Union of two arrays is 3 6 7 8 20 1 5 2 Intersection of two arrays is 7 3 6 ``` **另一种方法(当数组中的元素可能不同时)**: ## C ``` // C code to find intersection when // elements may not be distinct #include<bits/stdc++.h> using namespace std; // Function to find intersection void intersection(int a[], int b[], int n, int m) {     int i = 0, j = 0;     while (i < n && j < m)      {         if (a[i] > b[j])          {             j++;         }          else          if (b[j] > a[i])          {             i++;         }          else          {             // when both are equal             cout << a[i] << " ";             i++;             j++;         }     } } // Driver Code int main() {     int a[] = {1, 2, 3, 3, 4, 5, 5, 6};     int b[] = {3, 3, 5};     int n = sizeof(a)/sizeof(a[0]);     int m = sizeof(b)/sizeof(b[0]);     intersection(a, b, n, m); } ``` ## Java ```java // Java code to find intersection when // elements may not be distinct import java.io.*; class GFG { // Function to find intersection static void intersection(int a[], int b[], int n, int m) {     int i = 0, j = 0;     while (i < n && j < m)      {         if (a[i] > b[j])          {             j++;         }          else         if (b[j] > a[i])          {             i++;         }          else         {             // when both are equal             System.out.print(a[i] + " ");             i++;             j++;         }     } } // Driver Code     public static void main (String[] args) {     int a[] = {1, 2, 3, 3, 4, 5, 5, 6};     int b[] = {3, 3, 5};     int n = a.length;     int m = b.length;     intersection(a, b, n, m);     } } ``` ## Python 3 ``` # Python 3 code to find intersection  # when elements may not be distinct # Function to find intersection def intersection(a, b, n, m):     i = 0     j = 0     while (i < n and j < m) :         if (a[i] > b[j]) :             j += 1         else:             if (b[j] > a[i]) :                 i += 1             else:                 # when both are equal                 print(a[i], end = " ")                 i += 1                 j += 1 # Driver Code if __name__ =="__main__":     a = [1, 2, 3, 3, 4, 5, 5, 6]     b = [3, 3, 5]     n = len(a)     m = len(b)     intersection(a, b, n, m) # This code is contributed by Ita_c ``` ## C# ``` // C# code to find intersection when // elements may not be distinct using System; class GFG { // Function to find intersection static void intersection(int[] a, int[] b, int n, int m) {     int i = 0, j = 0;     while (i < n && j < m)      {         if (a[i] > b[j])          {             j++;         }          else         if (b[j] > a[i])          {             i++;         }          else         {             // when both are equal             Console.Write(a[i] + " ");             i++;             j++;         }     } } // Driver Code     public static void Main () {     int[] a = {1, 2, 3, 3, 4, 5, 5, 6};     int[] b = {3, 3, 5};     int n = a.Length;     int m = b.Length;     intersection(a, b, n, m);     } } // this code is contributed by mukul singh ``` ## PHP ```php <?php // PHP code to find intersection when // elements may not be distinct // Function to find intersection function intersection($a, $b, $n, $m) {     $i = 0; $j = 0;     while ($i < $n && $j < $m)      {         if ($a[$i] > $b[$j])          {             $j++;         }          else         if ($b[$j] > $a[$i])          {             $i++;         }          else         {             // when both are equal             echo($a[$i] . " ");             $i++;             $j++;         }     } } // Driver Code $a = array(1, 2, 3, 3, 4, 5, 5, 6); $b = array(3, 3, 5); $n = sizeof($a); $m = sizeof($b); intersection($a, $b, $n, $m); // This code is contributed  // by Mukul Singh ?> ``` **输出**: ``` 3 3 5 ``` 感谢 Sanny Kumar 建议使用上述方法。 **方法 4(使用散列)** ***联合**:* **联合** 1。 初始化一个空哈希集 **hs** 。 2.遍历第一个数组并将第一个数组的每个元素放入集合 S 中。 3.对第二个数组重复此过程。 4.打印设置 **hs** 。 **交叉点** 1.初始化一个空集 hs。 2.遍历第一个数组并将第一个数组的每个元素放入集合 S 中。 3.对于第二个数组的每个元素 x,请执行以下操作: 在集合 hs 中搜索 x 。 如果存在 x,则进行打印。 在哈希表搜索和插入操作花费Θ(1)时间的假设下,此方法的时间复杂度为Θ(m + n)。 ## C++ ``` // CPP program to find union and intersection // using sets #include <bits/stdc++.h> using namespace std; // Prints union of arr1[0..n1-1] and arr2[0..n2-1] void printUnion(int arr1[], int arr2[], int n1, int n2) {     set<int> hs;     // Inhsert the elements of arr1[] to set hs     for (int i = 0; i < n1; i++)         hs.insert(arr1[i]);     // Insert the elements of arr2[] to set hs     for (int i = 0; i < n2; i++)         hs.insert(arr2[i]);     // Print the content of set hs     for (auto it = hs.begin(); it != hs.end(); it++)         cout << *it << " ";     cout << endl; } // Prints intersection of arr1[0..n1-1] and // arr2[0..n2-1] void printIntersection(int arr1[], int arr2[],                                int n1, int n2) {     set<int> hs;     // Insert the elements of arr1[] to set S     for (int i = 0; i < n1; i++)         hs.insert(arr1[i]);     for (int i = 0; i < n2; i++)         // If element is present in set then         // push it to vector V         if (hs.find(arr2[i]) != hs.end())             cout << arr2[i] << " "; } // Driver Program int main() {     int arr1[] = { 7, 1, 5, 2, 3, 6 };     int arr2[] = { 3, 8, 6, 20, 7 };     int n1 = sizeof(arr1) / sizeof(arr1[0]);     int n2 = sizeof(arr2) / sizeof(arr2[0]);     printUnion(arr1, arr2, n1, n2);     printIntersection(arr1, arr2, n1, n2);     return 0; } ``` ## Java ```java // Java program to find union and intersection // using Hashing import java.util.HashSet; class Test {        // Prints union of arr1[0..m-1] and arr2[0..n-1]     static void printUnion(int arr1[], int arr2[])     {         HashSet<Integer> hs = new HashSet<>();         for (int i = 0; i < arr1.length; i++)              hs.add(arr1[i]);                 for (int i = 0; i < arr2.length; i++)              hs.add(arr2[i]);         System.out.println(hs);             }     // Prints intersection of arr1[0..m-1] and arr2[0..n-1]     static void printIntersection(int arr1[], int arr2[])     {         HashSet<Integer> hs = new HashSet<>();         HashSet<Integer> hs1 = new HashSet<>();         for (int i = 0; i < arr1.length; i++)              hs.add(arr1[i]);         for (int i = 0; i < arr2.length; i++)              if (hs.contains(arr2[i]))                System.out.print(arr2[i] + " ");     }     // Driver method to test the above function     public static void main(String[] args)      {         int arr1[] = {7, 1, 5, 2, 3, 6};         int arr2[] = {3, 8, 6, 20, 7};         System.out.println("Union of two arrays is : ");         printUnion(arr1, arr2);         System.out.println("Intersection of two arrays is : ");         printIntersection(arr1, arr2);             } } ``` ## Python ``` # Python program to find union and intersection  # using sets def printUnion(arr1, arr2, n1, n2):     hs = set()     # Inhsert the elements of arr1[] to set hs      for i in range(0, n1):         hs.add(arr1[i])     # Inhsert the elements of arr1[] to set hs      for i in range(0, n2):         hs.add(arr2[i])     print("Union:")     for i in hs:         print(i, end=" ")     print("\n")     # Prints intersection of arr1[0..n1-1] and      # arr2[0..n2-1]  def printIntersection(arr1, arr2, n1, n2):     hs = set()     # Insert the elements of arr1[] to set S      for i in range(0, n1):         hs.add(arr1[i])     print("Intersection:")     for i in range(0,n2):         # If element is present in set then          # push it to vector V         if arr2[i] in hs:             print(arr2[i],end=" ") # Driver Program  arr1 = [ 7, 1, 5, 2, 3, 6 ]  arr2 = [ 3, 8, 6, 20, 7 ]  n1 = len(arr1) n2 = len(arr2) printUnion(arr1, arr2, n1, n2)  printIntersection(arr1, arr2, n1, n2)  # This artice is contributed by Kumar Suman . ``` ## C# ``` // C# program to find union and intersection // using Hashing using System; using System.Linq; using System.Collections.Generic; class GFG {      // Prints union of arr1[0..m-1] and arr2[0..n-1]     static void printUnion(int []arr1, int []arr2)     {         HashSet<int> hs = new HashSet<int>();         for (int i = 0; i < arr1.Length; i++)              hs.Add(arr1[i]);              for (int i = 0; i < arr2.Length; i++)              hs.Add(arr2[i]);             Console.WriteLine(string.Join(", ", hs));          }     // Prints intersection of arr1[0..m-1] and arr2[0..n-1]     static void printIntersection(int []arr1, int []arr2)     {         HashSet<int> hs = new HashSet<int>();         for (int i = 0; i < arr1.Length; i++)              hs.Add(arr1[i]);         for (int i = 0; i < arr2.Length; i++)              if (hs.Contains(arr2[i]))             Console.Write(arr2[i] + " ");     }     // Driver Code     static void Main()      {         int []arr1 = {7, 1, 5, 2, 3, 6};         int []arr2 = {3, 8, 6, 20, 7};         Console.WriteLine("Union of two arrays is : ");         printUnion(arr1, arr2);         Console.WriteLine("\nIntersection of two arrays is : ");         printIntersection(arr1, arr2);      } } // This code is contributed by mits ``` This method is contributed by **Ankur Singh**. **输出**: ``` Union of two arrays is : [1, 2, 3, 20, 5, 6, 7, 8] Intersection of two arrays is : 3 6 7 ``` **方法 5(不使用任何预定义 Java 集合的哈希技术的种类)** 1.初始化大小为 m + n 的数组 2.在结果中填充第一个数组值 通过进行哈希处理(找到合适的位置)来排列数组 3.对第二个数组重复 4.在进行哈希处理时,如果发生冲突,则以递归的方式递增位置 ## Java ```java // Java program to find union and intersection  // using similar Hashing Technique  // without using any predefined Java Collections // Time Complexity best case & avg case = O(m+n) // Worst case = O(nlogn) //package com.arrays.math; public class UnsortedIntersectionUnion {         // Prints intersection of arr1[0..n1-1] and         // arr2[0..n2-1]     public void findPosition(int a[], int b[]) {         int v = (a.length + b.length);         int ans[] = new int[v];         int zero1 = 0;         int zero2 = 0;         System.out.print("Intersection : ");         // Iterate first array         for (int i = 0; i < a.length; i++)             zero1 = iterateArray(a, v, ans, i);         // Iterate second array         for (int j = 0; j < b.length; j++)             zero2 = iterateArray(b, v, ans, j);         int zero = zero1 + zero2;         placeZeros(v, ans, zero);         printUnion(v, ans, zero);     }     // Prints union of arr1[0..n1-1] and arr2[0..n2-1]     private void printUnion(int v, int[] ans, int zero) {         int zero1 = 0;         System.out.print("\nUnion : ");         for (int i = 0; i < v; i++) {             if ((zero == 0 && ans[i] == 0) || (ans[i] == 0 && zero1 > 0))                 continue;             if (ans[i] == 0)                 zero1++;             System.out.print(ans[i] + ",");         }     }     private void placeZeros(int v, int[] ans, int zero) {         if (zero == 2) {             System.out.println("0");             int d[] = { 0 };             placeValue(d, ans, 0, 0, v);         }         if (zero == 1) {             int d[] = { 0 };             placeValue(d, ans, 0, 0, v);         }     }     // Function to itreate array     private int iterateArray(int[] a, int v, int[] ans, int i) {         if (a[i] != 0) {             int p = a[i] % v;             placeValue(a, ans, i, p, v);         } else             return 1;         return 0;     }     private void placeValue(int[] a, int[] ans, int i, int p, int v) {         p = p % v;         if (ans[p] == 0)             ans[p] = a[i];         else {             if (ans[p] == a[i])                 System.out.print(a[i] + ",");             else {                 //Hashing collision happened increment position and do recursive call                 p = p + 1;                 placeValue(a, ans, i, p, v);             }         }     }     public static void main(String args[]) {         int a[] = { 7, 1, 5, 2, 3, 6 };         int b[] = { 3, 8, 6, 20, 7 };         UnsortedIntersectionUnion uiu = new UnsortedIntersectionUnion();         uiu.findPosition(a, b);     } } // This code is contributed by Mohanakrishnan S. ```