algorithm - 用 O(n·m) 列出交集

标签 algorithm list math

假设我们有两个长度分别为n和m的列表:

val l1 = Seq(1,2,3,4,5,6,7,8,9,0)
val l2 = Seq(2,4,6,8,10,12)

有没有办法用小于 O(n·m) 计算它们的交集?

也就是

val result = Seq(2,4,6,8)

编辑:我们可以假设我们的列表已排序。

最佳答案

对于排序列表,以下算法应该有效:

你可以有 2 个指针说 (i 和 j),一个在 l1,另一个在 l2。

现在你可以迭代 l1 和 l2 这样

 while (i< l1.size && j < l2.size ) {
    if l1[i] < l2[j] 
       i++ 
    else if (l1[i] == l2[j] )
       i++; j++; output = output U {l1[i]}
    else
       j++  
 }

这应该是 O(max(m,n))

关于algorithm - 用 O(n·m) 列出交集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46454261/

相关文章:

c# - 即使使用具有容量的构造函数,列表 C# 容量始终为 0?

java - 获取线和形状的交点

javascript - PaperJS - 如何沿路径移动并沿路径旋转

python - 不同数组项的所有可能组合

java - 评级文章 - 情绪分析

java - 在 Java 中将 2d 数组转换为列表列表

math - 从平面上的 2D 点转换为 3D

algorithm - 第 k 个最小元素的最大堆与最小堆

java - 将字符串中的各种字母大写

Python:返回两个或多个列表共有的项目