Answer
Merge Two Sorted Arrays
Method 1: Two-Pointer Technique (Efficient)
Java
import java.util.Arrays;
public class MergeSortedArrays {
public static void main(String[] args) {
int[] arr1 = { 1, 3, 5, 7, 9 };
int[] arr2 = { 2, 4, 6, 8, 10 };
int m = arr1.length, n = arr2.length;
int[] merged = new int[m + n];
int i = 0, j = 0, k = 0;
// Compare elements from both arrays, copy smaller
while (i < m && j < n) {
if (arr1[i] <= arr2[j]) {
merged[k++] = arr1[i++];
} else {
merged[k++] = arr2[j++];
}
}
// Copy remaining elements from arr1 (if any)
while (i < m) merged[k++] = arr1[i++];
// Copy remaining elements from arr2 (if any)
while (j < n) merged[k++] = arr2[j++];
System.out.println("Array 1: " + Arrays.toString(arr1));
System.out.println("Array 2: " + Arrays.toString(arr2));
System.out.println("Merged: " + Arrays.toString(merged));
}
}
Output
CODE
Array 1: [1, 3, 5, 7, 9]
Array 2: [2, 4, 6, 8, 10]
Merged: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
How Two-Pointer Works
CODE
arr1: [1, 3, 5, 7, 9] i=0
arr2: [2, 4, 6, 8, 10] j=0
Step 1: arr1[0]=1 < arr2[0]=2 → copy 1, i=1 → merged=[1]
Step 2: arr1[1]=3 > arr2[0]=2 → copy 2, j=1 → merged=[1,2]
Step 3: arr1[1]=3 < arr2[1]=4 → copy 3, i=2 → merged=[1,2,3]
...and so on
Method 2: Simple — Combine and Sort
Java
int[] arr1 = { 1, 3, 5 };
int[] arr2 = { 2, 4, 6, 8 };
int[] merged = new int[arr1.length + arr2.length];
System.arraycopy(arr1, 0, merged, 0, arr1.length);
System.arraycopy(arr2, 0, merged, arr1.length, arr2.length);
Arrays.sort(merged);
System.out.println(Arrays.toString(merged));
// → [1, 2, 3, 4, 5, 6, 8]
Method 3: Using Streams (Java 8+)
Java
int[] arr1 = { 1, 3, 5, 7 };
int[] arr2 = { 2, 4, 6, 8 };
int[] merged = IntStream.concat(
IntStream.of(arr1),
IntStream.of(arr2)
).sorted().toArray();
System.out.println(Arrays.toString(merged));
// → [1, 2, 3, 4, 5, 6, 7, 8]
Find Intersection of Two Arrays
Java
int[] arr1 = { 1, 2, 3, 4, 5 };
int[] arr2 = { 3, 4, 5, 6, 7 };
Set<Integer> set = new HashSet<>();
for (int n : arr1) set.add(n);
List<Integer> intersection = new ArrayList<>();
for (int n : arr2) {
if (set.contains(n)) intersection.add(n);
}
System.out.println("Intersection: " + intersection); // [3, 4, 5]
