有两张表,如何取出两张表中各自不存在的值
表A和表B,如何取出表B中表A不存在的值和如何取出表A中表B不存在的值
就是取出两张表各自独立的值, 用哪种算法可以实现。
[解决办法]
一次遍历即可,循环表A中的每个值,依次和表B中的比较,如果在表B中存在,则在表B和表A中删除次值,表A和表B中剩下的即为两都独立有的
[解决办法]
you did not understand what i said,
a[a_length];
b[b_length];
for(i = 0; i<a_length; i++)
{
for(j = 0; j<b_length; j++)
{
if(a[i] == b[j])
{
a[i] = b[j] = -1;
}
}
}
遍历完后两个数组不等于-1的就是其独有的
[解决办法]
用哈夫曼树或散列都可以。
例如,先用表B构造一颗哈夫曼树,然后用表A中的值在树中进行验证,A中验证不到的都是B没有的,而B中没有经过验证的都是A没有的。
用散列的话就是验证冲突了。
[解决办法]
(AB的合集)-(AB的交集)
[解决办法]
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>
#include<Windows.h>
int main()
{
int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int b[10] = {0, 2, 3, 7, 10, 12, 21, 52, 89, 100};
int c[10] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
int acount = sizeof(a) / sizeof(int);
int bcount = sizeof(b) / sizeof(int);
int ccount = sizeof(c) / sizeof(int);
int i = 0;
int j = 0;
int k = 0;
int flg = 1;
for (i = 0; i < acount; i++)
{
for(j = 0; j < bcount; j++)
{
if (a[i] == b[j])
{
c[j] = 0;
flg = 0;
break;
}
}
if (1 == flg)
{
printf("%5d", a[i]);
}
else
{
flg = 1;
}
}
printf("\n");
for (k = 0; k < ccount; k++)
{
if (c[k] == 1)
{
printf("%5d", b[k]);
}
}
printf("\n");
system("pause");
return 0;
}
[解决办法]
排序,然后二个指针p1指向A,p2指向B。当*p1==*p2,同时向后进一步,否则说明要么A没这个数要么B没这个数。