# Merge sorted array

From the LeetCode problem with the same name. The problem statement is:

Given two sorted integer arrays `nums1` and `nums2`, merge `nums2` into `nums1` as one sorted array.

The number of elements initialised in `nums1` and `nums2` are `m` and `n` respectively. You may assume that `nums1` has a size equal to `m+n` such that it has enough space to hold additional elements from `nums2`.

When we are adding elements to an array we should overwrite the end of the array first and work backwards. Since we know that `nums1` has `n` zero entries at the end we can place the largest numbers at the end without overwriting data before we move it.

class Solution { public void merge(int[] nums1, int m, int[] nums2, int n) { int p1 = m - 1; int p2 = n - 1; for (int i = m + n - 1; i >= 0; i--) { if (p1 < 0) { nums1[i] = nums2[p2]; p2--; continue; } if (p2 < 0) { nums1[i] = nums1[p1]; p1--; continue; } int greatest1 = nums1[p1]; int greatest2 = nums2[p2]; if (greatest1 < greatest2) { nums1[i] = nums2[p2]; p2--; continue; } else { nums1[i] = nums1[p1]; p1--; } } } }