假设我们分别有两个长度为n和m的列表:
val result = Seq(2,4,6,8)
有没有办法计算它们的交点小于O(n·m)?
那是
filter
编辑:我们可以假设我们的列表已经过排序。
答案 0 :(得分:2)
将其中一项放入哈希集。 O(分钟(N,M))
var set2 = new HashSet<int>(){2,4,6,8,10,12};
取另一组并检查它是否存在于哈希集中。每次访问都是O(1),因为我们需要另一个集合,我们创建了具有较短集合的散列集,这意味着如果在另一个集合中返回true,则时间为O(max(m,n)) 将其添加到您的结果中。
答案 1 :(得分: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))