Объединить два отсортированных массива в один отсортированный массив

78. Объединить два отсортированных массива в один отсортированный массив

Условие задачи:
📌 Даны два отсортированных массива nums1 и nums2. Нужно алгоритмически объединить их в один отсортированный массив.

Ограничения:

  • нельзя использовать встроенные сортировки

  • нужно сохранить отсортированный порядок элементов в результате

Код:

public int[] mergeSortedArrays(int[] nums1, int[] nums2) {
    // Пример: [1, 3, 5] и [2, 4, 6] -> [1, 2, 3, 4, 5, 6]
}

📌 Пример 1:
Вход:
nums1 = [1, 3, 5]
nums2 = [2, 4, 6]

Выход:
[1, 2, 3, 4, 5, 6]

📌 Пример 2:
Вход:
nums1 = [1, 2, 7]
nums2 = [3, 4, 5]

Выход:
[1, 2, 3, 4, 5, 7]

📌 Пример 3:
Вход:
nums1 = []
nums2 = [1, 2, 3]

Выход:
[1, 2, 3]


Спойлеры к решению

Подсказки
💡 Используй два указателя: один для nums1, второй для nums2.
💡 Сравнивай текущие элементы обоих массивов и меньший добавляй в результат.
💡 Когда один массив закончится, просто допиши оставшиеся элементы второго массива.
💡 Это классическая задача на merge-step из merge sort.

Решение
public int[] mergeSortedArrays(int[] nums1, int[] nums2) {
    int[] result = new int[nums1.length + nums2.length];

    int i = 0;
    int j = 0;
    int k = 0;

    while (i < nums1.length && j < nums2.length) {
        if (nums1[i] <= nums2[j]) {
            result[k++] = nums1[i++];
        } else {
            result[k++] = nums2[j++];
        }
    }

    while (i < nums1.length) {
        result[k++] = nums1[i++];
    }

    while (j < nums2.length) {
        result[k++] = nums2[j++];
    }

    return result;
}

Нужно пройти по обоим массивам двумя указателями, каждый раз брать меньший элемент и записывать его в результирующий массив. Когда один массив закончится, дописать остаток второго.