2011-11-27 77 views
0

给定2个数组我需要一个C函数/库,它将查找2个数组之间的不同。C库查找两个数组之间的区别

array1[] ={"a","b","c","e"} 
array2[] ={"a","c","e"} 

和函数应该返回

{"b"} 

这2个阵列保证进行排序,但不相同的尺寸。我只需要这个功能就快。

+0

“b”是唯一的,因为它不会在这两个数组中都不存在,我还没有尝试过任何东西,只需要多次遍历两个数组,但我需要它比这更快。 – Icestorm

+0

@Iststorm:好的,道歉,也许在某种程度上,你可以称之为'b''unique',尽管如果你有数组{',a,b,b}和'{c,c ,d,d}'。最好避免这种不必要的含糊术语。我认为你正在寻找“设置差异”或“对称差异”。 –

+0

它为什么要快?为什么它应该使用库函数? – wildplasser

回答

4

下面是一个O(n)的算法:

创建两个指针,每个初始化在每个阵列的第一元素指向。每次* p1 < * p2,将* p1添加到输出数组并增加p1。 p2相同。如果它们相等,则增加两者。

我会让你弄清楚如何处理重复的元素,以及当一个指针到达它的数组末尾时该怎么做。

[此外,如果你能使用C++,那么你应该只使用std::set_symmetric_difference]

+1

这是缺少'* p1 == * p2'时发生的情况的描述,非? –

+2

@Kerrek:给读者留下的练习... –

+1

让他让他自己解决锻炼... – Beginner

0

@Oli查尔斯沃思

如果ARR1 [] = { “A”, “B”,”在这种情况下,我猜你的逻辑将遍历数组中的元素(以较低者为准),但是没有必要,如下所示:在这种情况下,我猜你的逻辑将会遍历数组中的元素(以较低者为准),但并不需要第一个比较只有你能找到结果因此结果是可能的o(1)这种情况.....