最快的算法的大O打印长度为n的未排序数组和长度为m的排序数组之间的公共元素

时间:2016-10-08 15:04:28

标签: arrays algorithm sorting big-o

我的想法是需要O(n m) 这是因为
1 2 3 4
4 3 2 1
为了找到公共元素,您将遍历排序数组和未排序数组(在这种情况下,顶部数组已排序)。最坏的情况是,未排序的数组将是除反转之外的排序数组。因此,你会比较1,4,然后是1,3,然后是...等。然后你会比较2,4然后2,3等。 因此,您最终会得到O(n
m)

这是对的吗?

2 个答案:

答案 0 :(得分:1)

致j_random_hacker,

应为O(log(n)* m)
您可以使用二进制搜索查找已排序数组中未排序数组中的每个项目,即log(n)时间。对于未排序数组中的每个项目,这应该是O(log(n)* m)时间。

答案 1 :(得分:1)

最快的解决方案是将较小数组的元素放入哈希表中,然后查找较大表的元素。实际上,这是O(max(n,m))。