任何人都可以解释下面描述的给定问题的方法如何在O(N)时间和O(1)空间中运行?
问题:给定2个排序数组,找到共同的元素数。数组长度相同,每个都有不同的元素。
以下列2个阵列为例:
A: 13, 27, 35, 40, 49, 55, 59
B: 17, 35, 39, 40, 55, 58, 60
我很困惑我们正在做一个线性循环的部分,以获得A的所有元素已经制作O(N)时间,然后再次在B中进行线性搜索以找到元素。 B中的班轮搜索正在最后一个停止的地方。这不会使给定方法的时间复杂度为O(N ^ 2)吗?如果没有,为什么?
答案 0 :(得分:5)
这是Merge Algorithm的变体,除了输出序列不正在构建之外,您使用线性搜索将列表推进到下一个位置,而不是一次只传递一个元素
如果N是两个列表中元素的总数,则合并时间为O(N),空间中为O(N)。空间要求来自存储输出序列的需要,而算法不会这样做。因此,您的算法在时间上保持为O(N),并在空间要求中变为O(1)。