我想将数组的所有元素复制到指定位置的另一个元素。
例如:
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)
我首选的节目位于Java
或C#
我尝试的伪代码:
//将第一个数组的所有元素复制到输出数组,直到索引 //将'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.Copy
或memcpy
种内部功能。但是,我只是想了解did they do it
如何以及即兴创作我的prgm内容。)
答案 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)
,其中m
和n
分别是A和B的长度。