你的解决方案很慢,因为你有很多插入。每个插入都是 O(N) 复杂度。
我的解决方案:a = [1,1,2,4,7,7,11,13,13,13,15,20,25,26,27,30,45,70] b = [5,7,9 ,45]
将 b.Length 项目插入 a 的末尾。a = [1,1,2,4,7,7,11,13,13,13,15,20,25,26,27,30,45,70,x,x,x,x] b = [ 5,7,9,45]
拿3个指针:
- 指向最后一个实际元素的指针(在示例中指向70的指针)
- 指向b到最后一个元素的指针(在示例中指向45的指针)
- 指向最后一个的指针
a
这是我在 C# 中的解决方案:
int p1 = a.Length - 1;
int p2 = b.Length - 1;
int p3 = a.Length + b.Length - 1;
//Insert b.Length items to end of a.
while (p3 >= 0 && p2 >= 0)
{
if (p1 < 0 || b[p2] >= a[p1])
{
a[p3--] = b[p2--];
}
else
{
a[p3--] = a[p1--];
}
}