字符串替换相关题目(合并数组)

1、题目描述:
有两个排序数组 A1 和 A2,内存在 A1 的末尾有足够多的空余空间容纳 A2。请实现一个函数,把 A2 中的所有数字插入到 A1 中,并且所有的数字是排序的。
2、测试用例

3、解答思路
思路一:从头到尾扫描字符串,每次碰到空格字符的时候进行替换。但是由于是把1个字符替换成3个字符,就必须要把空格后面所有的字符后移2字节。
思路二:在合并两个数组(包括字符串)时,如果从前往后赋值每个数字(或字符),则需要重复移动数字(或字符)多次,那么我们可以考虑从后往前复制,这样就能减少移动的次数,从而提高效率。
复杂度分析:时间复杂度O(N^2)
代码如下:

#include <stdio.h>
#include <string.h>

void Unite_Arry(int *arrA, int *arrB, int len1, int len2)
{
	//创建一个新的数组,用来存放重组后的元素
	int arrC[30] = {0};
	//arrC数组的长度
	int len3 = len1 + len2;
	int len = len3;
	//入参判断
	if(NULL == arrA || NULL == arrB || (len1-1) < 0 || (len2-1) < 0)
	{
		printf("The input parameter error!\n");
		return;
	}
	//开始数组重组
	while((len1-1) >= 0 && (len2-1) >= 0)
	{
		if(arrA[len1-1] >= arrB[len2-1])
		{
			arrC[lem3-1] = arrA[len1-1];
			len1--;
			len3--;
		}
		else
		{
			arrC[len3-1] = arrB[len2-1];
			len2--;
			len3--;
		}
	}
	//当arrA数组的元素比arrB数组的元素多的时候,直接复制多出的元素到arrC的最前面
	if(len1 > 0)
	{
		memcpy(arrC, arrA, len1*sizeof(int));
	}
	//当arrB数组的元素比arrA数组的元素多的时候,直接复制多出的元素到arrC的最前面
 	if(len2 > 0)
 	{
  		memcpy(arrC, arrB, len2*sizeof(int));
 	}
 	//输出重组的数组
 	int i;
 	printf("Reorganized arrC is:");
 	for(i=0;i<len;i++)
 	{
 		printf("%d ", arrC[i]);
 	}
 	printf("\n");
 }

int main()
{
	int arrA[] = {1,3,6,9,10};
	int arrB[] = {0,1,2,12};
	int n,m;
	printf("Original arrA is:");
	for(n=0; n<sizeof(arrA)/sizeof(int); n++)
	{
		printf("%d ", arrA[n]);
	}
	printf("\n");
	printf("Original arrB is:");
	for(m=0; m<sizeof(arrB)/sizeof(int); m++)
	{
		printf("%d ", arrB[m]);
	}
	printf("\n");
	Unite_Arry((int*)arrA, (int*)arrB, sizeof(arrA)/sizeof(int), sizeof(arrB)/sizeof(int));

	return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值