问题:给定两个大小为n的排序数组A []和B [],检查它们是否具有非空交集(我不需要交集本身,仅决定)
解决方案:对于A []的每个元素,在B []中进行二进制排序,得到一个O(n lg n)解。从头到尾迭代每个数组(做一些非常类似于Mergesort的Merge)给出了O(n)解决方案。
我想知道是否有更好的(在复杂性方面)解决方案。我很确定没有,但我一直在寻找“嘿,如果你给我一个更好的解决方案,我可以在o(n lg n)中对矢量进行排序,这是不可能的”-kind-of-argument < / p>
答案 0 :(得分:2)
再次阅读问题 - "Given two sorted arrays ..."
。
不需要初始提议的排序,这会导致您使用O(n)
解决方案来执行类似合并排序的过程。
你不能比类似合并排序的过程做得更好,记住你可以在找到交叉点时提早停止。
如果没有排序:
基于哈希映射的解决方案在技术上是O(n)
- 将A中的所有元素插入到哈希映射(O(n)
)中。对B(O(n)
)中的每个元素进行查找。
对于排序解决方案,由于您只需要做出决定,您只需要对A进行排序并循环遍历B,在A中为B中的每个元素执行O(log n)
查找,并在找到项目后停止。你不会比O(n log n)
做得更好,但是如果早期找到匹配,你可以减少多达一半的工作。