将数组的所有元素复制到指定索引处的另一个数组

时间:2013-12-14 06:41:01

标签: algorithm pseudocode

我想将数组的所有元素复制到指定位置的另一个元素。

例如:

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's at first index of A)

我首选的节目位于JavaC#

我尝试的伪代码:

//将第一个数组的所有元素复制到输出数组,直到索引 //将'a'复制到输出数组

for(int i=0;i<insert-index;i++)
output[i] = A[i] 

//将目标数组的所有元素复制到输出数组 //将'x','y','z'复制到输出数组

for(int i=0;i<B.Array.Length;i++)
output[i] = B[i]

//将源数组的所有元素复制到输出数组。 //复制剩余的'b','c','d'

for(int i=0;i<A.Array.Length-index;i++)
output[i]=A[i]

我可以给出的算法的最佳镜头是O(n power 3)

任何身体都可以告诉我如何接近或任何指针都非常感激。

(编辑:我知道我可以使用Array.Copymemcpy种内部功能。但是,我只是想了解did they do it如何以及即兴创作我的prgm内容。)

2 个答案:

答案 0 :(得分:1)

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;
}

答案 1 :(得分:1)

您只需要考虑起始和结束指数需要做什么 我在下面提到了一些评论。

// 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),其中mn分别是A和B的长度。