|
|
1
39
假设您正在进行合并排序,但不要将结果发送到任何位置。如果你到达任意一个源的末尾,就没有交集。每次比较每个元素的下一个元素时,如果它们相等,就会有一个交集。 例如:
|
|
|
2
7
因为有人想知道STL。开箱即用,集合交集算法会比你想要的做得更多:它会找到所有的公共值。
这在O(M+N)时间内运行,但它需要存储所有重复项,并且在找到第一个重复项时不会停止。 现在,从GNU修改代码 implementation 在STL中,我们可以更精确地得到你想要的。
|
|
|
3
4
如果一个列表比另一个短得多,那么二进制搜索就是解决问题的方法。如果列表的长度相似,并且您对O(M+N)满意,那么标准的“合并”就可以了。有更复杂的算法更灵活。我在自己的搜索中发现的一篇论文是: |
|
|
4
3
如果您不关心内存消耗,那么可以通过使用哈希来获得良好的性能,即使用键=一个数组的值创建哈希,并针对该哈希测试第二个数组的值。 |
|
|
5
1
如果您使用的是C 3.0,那么为什么不在这里利用LINQ呢?
这不仅是通用的(适用于任何可比较的类型),引擎盖下的实现也相当有效(使用哈希算法)。 |
|
|
6
0
如果值的范围很小,可以为其中一个值(时间成本=o(n))建立一个查找表,然后检查是否从另一个列表中设置了位(时间成本=o(n))。如果范围很大,可以对哈希表执行类似的操作。 格米克的合并分类技巧是一个更好的主意。 |
|
|
7
0
戈梅克走上了正确的道路,但有点忽略了算法。 首先比较arraya[0]和arrayb[0]。如果它们相等,你就完了。 如果arraya[0]小于arrayb[0],则移动到arraya[1]。 如果arraya[0]大于arrayb[0],则移动到arrayb[1]。 一直往前走直到到达一个数组的末尾或者找到一个匹配项。 |
|
|
feasega · 聚合物模拟-2个节点之间的最短路线,适用于所有节点 1 年前 |
|
|
Alisa Petrova · 在有向图中更改一对顶点以创建循环 1 年前 |
|
|
b39b332d · 使用C++标准库实现高效间隔存储 1 年前 |
|
ABGR · 二叉树的直径——当最长路径不通过根时的失败案例 1 年前 |
|
|
EpicAshman · 数独棋盘程序中同一列和同一行出现两次的数字 1 年前 |