Скопируйте все элементы массива в другой массив по указанному индексу

Я хочу скопировать все элементы массива в другой в определенном месте.

Например:

Array A contains {'a', 'b', 'c', 'd'}

Array B contains {'x','y', 'z'}

Array C should now contain {'a', 'x', 'y', 'z', 'b', 'c', 'd'} when 'insert-index' is 1 (insert all B at first index of A)

Мое предпочтительное программирование в Java или в C#

псевдокод моей попытки:

//Скопируем все элементы первого массива в выходной массив до индекса //Копируем 'a' в выходной массив

for(int i=0;i
<p>//Скопируем все элементы целевого массива в выходной массив <span>//копируем 'x', 'y', 'z' в выходной массив</span></p> <pre class="prettyprint linenums">for(int i=0;i</pre><code> <p>//копируем все элементы исходного массива в выходной массив. <span>//копирует оставшиеся 'b', 'c', 'd'</span></p> <pre class="prettyprint linenums">for(int i=0;i</pre><code> <p> Лучший снимок алгоритма, который я мог бы дать, - <code>O(n power 3)

Может ли любой орган рассказать мне, как еще подойти, или какие-либо указатели очень ценятся.

(EDIT: Я знаю, что могу использовать функции Array.Copy или memcpy но я просто пытаюсь узнать, как did they do it а также импровизировать мои вещи prgm.)

2 ответа

Вам просто нужно подумать, какими должны быть начальные и конечные индексы. Я привел некоторые комментарии ниже.

// this part is straightforward
for (int i = 0; i < insert-index; i++)
 output[i] = A[i]

// we already have insert-index items in output, so continue from there
for (int i = 0; i < B.length; i++)
 output[insert-index + i] = B[i]

// we already have (B.length + insert-index) items in output,
// and we've already used insert-index items from A, so continue from there
for (int i = insert-index; i < A.length; i++)
 output[B.length + i] = A[i]

Поскольку мы только касаемся каждого элемента A и B один раз, это O(n). Но, вероятно, было бы лучше сказать это O(m + n), где m и n - длины A и B соответственно.


public Array getCombination(int index, Array array1, Array array2)
{
 Array returnThis = new Array[array1.length + array2.length];
 for (int i = 0; i < index; i++)
 {
 returnThis[i] = array1[i];
 }

 for (int i = 0; i < array2.length; i++)
 {
 returnThis[i + index] = array2[i]; 
 }

 for (int i = index; i < array1.length; i++)
 {
 returnThis[i + array2.length] = array1[i];
 }

 return returnThis;
}

licensed under cc by-sa 3.0 with attribution.