我有以下问题:
给定两个大小为 m 和 n 的不同整数 A 和 B 的数组,找到第一个公共元素的上限复杂度是多少?除了输入数组之外,我最多可以使用 O(k) 内存。
k 是一个常数(意味着除了输入之外我只能使用常数内存)
我已经在另一个网站上问过这个问题:
但没有解决问题
我有以下问题:
给定两个大小为 m 和 n 的不同整数 A 和 B 的数组,找到第一个公共元素的上限复杂度是多少?除了输入数组之外,我最多可以使用 O(k) 内存。
k 是一个常数(意味着除了输入之外我只能使用常数内存)
我已经在另一个网站上问过这个问题:
但没有解决问题
我将对您在 CS 上的原始帖子中的第二个问题进行破解,因为我不确定您对问题的总结是否是最好的。
给定两个大小为m和n的不同整数A和B的未排序数组;知道数组之间的公共元素在两个数组中具有相同的相对顺序,并且对于每两个连续的公共元素,它们的距离最多为k(常数),确定两个数组之间的所有公共元素保持它们的相对顺序并使用除了输入数组之外,最多O(k)内存。
我将再次使用评论和您对原始问题的编辑中提到的堆,但这次我们只需要一个堆。
请注意,为了确定元素A [i] 是否在数组B中匹配,我们只需要检查元素B [ik].. B [i+k]。在B的子数组上使用 heapify在O(k)时间和 2k+1 = O(k)空间中构造这些元素的堆B'。确定B'中是否存在与A [i]的匹配项需要O(log k)。然后我们遍历A for i=1..m,更新B'并检查与A的匹配[一世]。这保持了输出中的相对顺序。要确定A中的所有m个元素是否匹配需要O(km log k)或O(m)时间。
笔记: