一路数组匹配笔试题
一道数组匹配笔试题
有两个等长数组A,B,所含元素相同,但顺序不同,只能取得A数组某值和B数组某值进行比较,比较结果大于、小于或等于,但是不能取得同一个数组A或B中的两个数进行比较,也不能取得某数组中的某个值。写一个算法实现正确的匹配(即A数组中某值与B数组中某值相等)。
上述代码存在有错吗?存在内存泄露问题吗?
------解决方案--------------------
matching函数中result指针数组做个初始化,函数外面释放result[i]的时候判空一下,不为空则delete[]。
有两个等长数组A,B,所含元素相同,但顺序不同,只能取得A数组某值和B数组某值进行比较,比较结果大于、小于或等于,但是不能取得同一个数组A或B中的两个数进行比较,也不能取得某数组中的某个值。写一个算法实现正确的匹配(即A数组中某值与B数组中某值相等)。
#include <iostream>
#include <cmath>
using namespace std;
int** matching(int *a, int *b, int len);
int main()
{
int a[10]={1,2,3,4,5,6,7,8,9,10};
int b[10]={10,6,4,5,1,8,7,9,3,2};
int i=0;
int len=sizeof(a)/sizeof(int);
int **result = matching(a,b,len);
for(i;i<len;i++)
{
cout<<result[i][0]<<' '<<result[i][1]<<endl;
}
i=0;
while(i<len)
{
delete [] result[i];
result[i] =NULL;
i++;
}
delete [] result;
result = NULL;
return 0;
}
int** matching(int *a, int *b, int len)
{
int **result = new int* [len];
int k=0;
for(int i=0;i<len;i++)
{
for(int j=0;j<len;j++)
{
if (a[i]==b[j])
{
result[k] = new int [2];
result[k][0]=i;
result[k][1]=j;
}
}
k++;
}
return result;
}
上述代码存在有错吗?存在内存泄露问题吗?
c
c++
算法
------解决方案--------------------
matching函数中result指针数组做个初始化,函数外面释放result[i]的时候判空一下,不为空则delete[]。