#面试题#

1,将两个数组按升序合并,并过滤掉重复数组元素

void Array(int* InputArray1, int InputNum1, int* InputArray2, int InputNum2, int** OutPutArray, int* OutputNum)
{
	int *R = new int[InputNum1 + InputNum2 + 1];
	int num = InputNum1 + InputNum2;
	int temp;
	int *R1 = new int[InputNum1 + InputNum2 + 1];
	int flag = 0;
	int count = 0;
//合并到一个数组里面
	for (int i = 0; i < InputNum1 + InputNum2; i++)
	{
		if (i < InputNum1)
		{
			R[i] = InputArray1[i];
		}
		else
			R[i] = InputArray2[i - (InputNum1)];
	}

//数组进行排序
	for (int i = 0; i < InputNum1 + InputNum2; i++)
	{
		for (int j = 0; j < InputNum1 + InputNum2 - i - 1; j++)
		{
			if (R[j] > R[j + 1])
			{
				temp = R[j];
				R[j] = R[j + 1];
				R[j + 1] = R[j];
			}
		}
	}

	for (int i = 0; i < num; i++)
		cout << R[i];

	cout << endl;

//重复数组元素进行删除
	for (int i = 0; i < InputNum1 + InputNum2 - 1; i++)
	{
		if (R[i + 1] == R[i])
		{
			R1[flag] = i + 1;
			flag++;
		}
	}

	*OutPutArray = new int[InputNum1 + InputNum2 + 1];

	for (int i = 0,j = 0; i < InputNum1 + InputNum2 ; i++)
	{
		if (R1[count] != i)
		{
			(*OutPutArray)[j] = R[i];
			j++;
		}
		else
			count++;
	}

	*OutputNum = InputNum1 + InputNum2 - flag;
}

int _tmain(int argc, _TCHAR* argv[])
{
	int a1[] = {1,2,2,5,1};
	int a2[] = {1,2,3,4,5};
	int* a3 = NULL;
	int num = 0;

	Array(a1, 5, a2, 5, &a3, &num);

	for (int i = 0; i < num; i++)
	{
		cout << a3[i] << " ";
	}
	cout << endl;

	system("pause");
	return 0;
}


当时第一次做的时候,大致的思路是对的,分三步去实现整个函数功能,因为是手写,忽略了以下几点细节,希望能够引以为戒

1. 申请动态内存

   数组: int *Array = new int [ Size ] ;

       char* String = new char[ Size ] ;

2. 对作为二维数组的形参的操作

    例如:

void Array(int* InputArray1, int InputNum1, int* InputArray2, int InputNum2, int** OutPutArray, int* OutputNum)
我当时在纸上写的对二级指针的操作是:*OutPutArray[j] = R[i]; //这里少了一个括号 (*OutPutArray)[j] = R[i];导致我在编译器中一直出现内存读写错误,
编译器把它理解成 *(OutPutArray[j]) = R[i];

以上是我事后反思自己当时纸写代码时出现的问题,几个小细节没有注意到,希望能有帮助

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值