我已经发布了一个相当简单的算法,可以在此答案中准确解决该问题
但是,在该问题中,我们假设输入由文本流表示,并且单词存储在易于搜索的集合中。
在您的情况下,输入的表示方式略有不同:作为一堆矢量,每个单词的位置都已排序。通过将所有这些向量简单地合并为(position,word)
按位置排序的对的单个向量,可以很容易地将该表示转换为上述算法所需的形式。通过将原始向量放入优先级队列(根据其第一个元素排序),可以从字面上完成,也可以“虚拟”完成。在这种情况下,从队列中弹出元素意味着从队列中的第一矢量弹出第一元素,并可能根据其新的第一元素将第一矢量沉入队列。
当然,由于对问题的陈述将单词的数量明确地固定为 3 ,因此您可以简单地检查所有三个数组的第一个元素,并在每次迭代时弹出最小的一个。这为您提供了一种O(N)
算法,其中N
是所有数组的总长度。
同样,您对问题的陈述似乎暗示目标词可以在文本中重叠,这很奇怪(假设您使用术语“词”)。这是故意的吗?无论如何,以上链接的算法都不会出现任何问题。