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]
Спойлеры к решению
Подсказки
💡 Используй два указателя: один для
💡 Сравнивай текущие элементы обоих массивов и меньший добавляй в результат.
💡 Когда один массив закончится, просто допиши оставшиеся элементы второго массива.
💡 Это классическая задача на merge-step из merge sort.
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;
}
Нужно пройти по обоим массивам двумя указателями, каждый раз брать меньший элемент и записывать его в результирующий массив. Когда один массив закончится, дописать остаток второго.