Find the Union and Intersection of the Two Sorted Arrays
Understanding the Problem
The goal is to find the union and intersection of two sorted arrays using different methods.
Method 1: Using Two Pointers
This method uses two pointers to traverse both arrays and find union and intersection efficiently.
#include <stdio.h> void findUnion(int arr1[], int arr2[], int m, int n) { int i = 0, j = 0; while (i < m && j < n) { if (arr1[i] < arr2[j]) printf("%d ", arr1[i++]); else if (arr2[j] < arr1[i]) printf("%d ", arr2[j++]); else { printf("%d ", arr2[j++]); i++; } } while (i < m) printf("%d ", arr1[i++]); while (j < n) printf("%d ", arr2[j++]); } void findIntersection(int arr1[], int arr2[], int m, int n) { int i = 0, j = 0; while (i < m && j < n) { if (arr1[i] < arr2[j]) i++; else if (arr2[j] < arr1[i]) j++; else { printf("%d ", arr2[j++]); i++; } } } int main() { int arr1[] = {1, 2, 4, 5, 6}; int arr2[] = {2, 3, 5, 7}; int m = sizeof(arr1)/sizeof(arr1[0]); int n = sizeof(arr2)/sizeof(arr2[0]); printf("Union: "); findUnion(arr1, arr2, m, n); printf("\nIntersection: "); findIntersection(arr1, arr2, m, n); return 0; }
Output:
Union: 1 2 3 4 5 6 7 Intersection: 2 5
Method 2: Using Hashing
This method uses a hash table to store unique elements and compute union and intersection.
#include <stdio.h> #include <stdlib.h> #define MAX 1000 int hash[MAX] = {0}; void findUnion(int arr1[], int arr2[], int m, int n) { for (int i = 0; i < m; i++) hash[arr1[i]] = 1; for (int i = 0; i < n; i++) hash[arr2[i]] = 1; for (int i = 0; i < MAX; i++) if (hash[i]) printf("%d ", i); } void findIntersection(int arr1[], int arr2[], int m, int n) { for (int i = 0; i < m; i++) hash[arr1[i]] = 1; for (int i = 0; i < n; i++) if (hash[arr2[i]]) printf("%d ", arr2[i]); } int main() { int arr1[] = {1, 2, 4, 5, 6}; int arr2[] = {2, 3, 5, 7}; int m = sizeof(arr1)/sizeof(arr1[0]); int n = sizeof(arr2)/sizeof(arr2[0]); printf("Union: "); findUnion(arr1, arr2, m, n); printf("\nIntersection: "); findIntersection(arr1, arr2, m, n); return 0; }
Output:
Union: 1 2 3 4 5 6 7 Intersection: 2 5
Method 3: Using Merge Process
This method merges two arrays into a sorted list and extracts union and intersection.
#include <stdio.h> void mergeUnion(int arr1[], int arr2[], int m, int n) { int i = 0, j = 0; while (i < m && j < n) { if (arr1[i] < arr2[j]) printf("%d ", arr1[i++]); else if (arr2[j] < arr1[i]) printf("%d ", arr2[j++]); else { printf("%d ", arr2[j++]); i++; } } while (i < m) printf("%d ", arr1[i++]); while (j < n) printf("%d ", arr2[j++]); } void mergeIntersection(int arr1[], int arr2[], int m, int n) { int i = 0, j = 0; while (i < m && j < n) { if (arr1[i] < arr2[j]) i++; else if (arr2[j] < arr1[i]) j++; else { printf("%d ", arr2[j++]); i++; } } } int main() { int arr1[] = {1, 2, 4, 5, 6}; int arr2[] = {2, 3, 5, 7}; int m = sizeof(arr1)/sizeof(arr1[0]); int n = sizeof(arr2)/sizeof(arr2[0]); printf("Union: "); mergeUnion(arr1, arr2, m, n); printf("\nIntersection: "); mergeIntersection(arr1, arr2, m, n); return 0; }
Output:
Union: 1 2 3 4 5 6 7 Intersection: 2 5