Объединить 2 массива разной длинны без сортировки. При этом 3й массив должен идти по возрастанию
Смысл решения сводится к сравнению первых элементов массива. Полученный элемент мы вставляем в третий массив. Далее операция сравнения повторяется, но сравнение уже идет с первый элементов и нулевым.
Оба массива отсортированы по возрастанию, минимальный элемент всегда будет первым Вот что я наковырял...
public class Merge {
public int[] merge(int[] left, int[] right) {
int[] rsl = new int[left.length + right.length];
int i = 0, j = 0, z = 0;
while (i < left.length && j < right.length) {
rsl[z++] = left[i] < right[j] ? left[i++] : right[j++];
}
return rsl;
}
public static void main(String[] args) {
Merge process = new Merge();
int[] rsl = process.merge(
new int[] {1, 3, 5},
new int[] {2, 4}
);
System.out.println(Arrays.toString(rsl));
}
}
Проблема в том что у меня разные длины массивов, и получается , что как только первый или второй массив кончается , вё идёт по звезде... Думаю что ошибка где то в цикле while . Подскажите куда копать? Спасибо.
Ответы (1 шт):
Автор решения: Igor
→ Ссылка
Дело не в разных длинах массивов. Когда массивы одинаковой длины, будет та же проблема, так как один из массивов неизбежно закончится раньше, чем другой.
while (i < left.length && j < right.length) {
rsl[z++] = left[i] < right[j] ? left[i++] : right[j++];
}
while (i < left.length) {
rsl[z++] = left[i++];
}
while (j < right.length) {
rsl[z++] = right[j++];
}