Добрый день! Сталкнулся со следующей задачей:
Заданы два одномерных массива с различным количество элементов и натурльное число k. Объединить их в один массив, включив второй массив между k-м и (k+1)-м элементами первого, при этом не используя дополнительный массив.
Но нигде не нашёл на неё решения, везде используется 3 типа int[a.length + b.length] и т.п. Может я совсем буквально подошёл к решению задачи?
Denis Maximuk
2 уровень
Объедение двух массивов без использования третьего
Решен
Комментарии (3)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Andrey Gordeev
19 ноября 2021, 08:07
Пример для double[], для int[] соответственно IntStream.
return DoubleStream.concat(DoubleStream.concat(Arrays.stream(arrayOne, 0, k + 1), Arrays.stream(arrayTwo, 0, arrayTwo.length)),
Arrays.stream(arrayOne, k + 1, arrayOne.length)).toArray();
или
arrayOne = Arrays.copyOf(arrayOne, (arrayOne.length + arrayTwo.length));
Однако под капотом copyOf использует:
создание нового массива и нативный код
System.arraycopy(Object src, int srcPos,
Object dest, int destPos,
int length)
который должен принять новосозданный массив как новое хранилище, в которое будут перемещены все элементы изначального массива.
Ну и дальше цикл вставок.
Возможно такое решение подойдёт?
Но ниже приведённый ответ, касательно изменения длинны массива после его создания - верен.
0
Denis Maximuk
24 сентября 2021, 22:24
Как тогда решить данную задачу,без создания третьего массива?
0
Ksenia VolkovaJava Developer в DXCMaster
24 сентября 2021, 21:35решение
Размер существующего массива изменить нельзя. А значит, нельзя объединить два массива, не создавая третьего.
+2