C/C++ 最快的速度求两个数组的交集,提示数组中的元素是无序的,两数组长度不一样
展开全部
讲思路好了,a[n],b[m],从i = n-1开始,用a[i]与b数组所有的数比较,初始化k=0,如果有相同就将a[i]与a[k]交换,k++,不相同就n--,最后遍历完了a[n]就是交集的所有元素了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
哈希
如果知道数组内数的范围1-1000,以空间换时间,设置一个长度1000的数组,遍历两个数组,再遍历你设置的那个数组,就能找出来
不知道范围就得找哈希函数映射到一个范围内再找
如果知道数组内数的范围1-1000,以空间换时间,设置一个长度1000的数组,遍历两个数组,再遍历你设置的那个数组,就能找出来
不知道范围就得找哈希函数映射到一个范围内再找
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
sort(A);
sort(B);
set_intersection(A,B);
sort(B);
set_intersection(A,B);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
一个一个循环比较吧。木有其他方法。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include <stdio.h>
#include <string.h>
int main()
{
char str1[] = "1111222333344455611122333";
char str2[] = "11222333664455778899112233";
char result[100];
int i=0;
int j=0;
int k=0;
int n,flag;
memset (result,0,sizeof(result));
while(str1[i]!='\0')
{
flag = 1;
for(n=0;n<k;n++)//查看此元素是否出现过
{
if(str1[i]==result[n])
{
flag = 0;
break;
}
}
if(flag)
{
j = 0;
while(str2[j]!='\0')
{
if(str1[i] == str2[j])
{
result[k++] = str1[i];
break;
}
j++;
}
}
i++;
}
printf("result :%s\n",result);
return 0;
}
楼主 求满意 求赞同 求给分 不明白的地方可以给我留言
#include <string.h>
int main()
{
char str1[] = "1111222333344455611122333";
char str2[] = "11222333664455778899112233";
char result[100];
int i=0;
int j=0;
int k=0;
int n,flag;
memset (result,0,sizeof(result));
while(str1[i]!='\0')
{
flag = 1;
for(n=0;n<k;n++)//查看此元素是否出现过
{
if(str1[i]==result[n])
{
flag = 0;
break;
}
}
if(flag)
{
j = 0;
while(str2[j]!='\0')
{
if(str1[i] == str2[j])
{
result[k++] = str1[i];
break;
}
j++;
}
}
i++;
}
printf("result :%s\n",result);
return 0;
}
楼主 求满意 求赞同 求给分 不明白的地方可以给我留言
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询