public static void main(String[] args) {
int[] nums1 = new int[]{2, 5, 6, 0, 0, 0};
int[] nums2 = new int[]{1, 2, 3};
int m = 3;
int n = 3;
int[] merge = merge(nums1, m, nums2, n);
for (int i = 0; i < merge.length; i++) {
System.out.print(merge[i] + " ");
}
}
public static int[] merge(int[] nums1, int m, int[] nums2, int n) {
// Make a copy of nums1.
int[] nums1_copy = new int[m];
System.arraycopy(nums1, 0, nums1_copy, 0, m);
// Two get pointers for nums1_copy and nums2.
int p1 = 0;
int p2 = 0;
// Set pointer for nums1
int p = 0;
// Compare elements from nums1_copy and nums2
// and add the smallest one into nums1.
while ((p1 < m) && (p2 < n))
nums1[p++] = (nums1_copy[p1] < nums2[p2]) ? nums1_copy[p1++] : nums2[p2++];
// if there are still elements to add
if (p2 < n)
System.arraycopy(nums2, p2, nums1, p, n - p2);
if (p1 < m)
System.arraycopy(nums1_copy, p1, nums1, p, m - p1);
return nums1;
}