题目:有两个有序的数组string1和string2,写一个函数,将string2插入到string1中,并且string1仍是有序的数组。
输入:两个有序数组
输出:合并后一个有序数组
需要考虑的细节:
1、数组string1是否有足够的空间容纳string2;
在程序中,需要考虑到两个数组的长度不能大于string1的实际长度。
2、是否能够只遍历一次数组,复杂度O(n);
直接的做法是,正序遍历string1和string2,将string2中的数字插入到string1合适的位置。每插入一个数字,string1被插入位置的后面所有数字都后移一位,复杂度OO(n^2)。换一种思路,如果一开始每个数字所放的位置就是空闲的,不需要其他数字让位置,这样就能实现复杂度O(n)。由此想到,逆序遍历string1和string2,正好可以实现。
代码如下:
void mergeSortedString(int str1[], int len1, int str2[], int len2, int length)
{
if(str1 == NULL || str2 == NULL || len1 <= 0 || len2 <= 0 || length <=0)
{
return;
}
int newLength