algorithm - 在 O(m + n) 中合并跳过列表
问题描述
我被要求编写一个实现,以 O (m + n) 时间复杂度将包含 n 个元素的跳过列表 A 与包含 m 个元素的跳过列表 B 合并。我不需要代码,只是一个基本的解释我如何实现这一点。
我想过遍历 A,遍历 B 并比较值,然后将其合并到新的跳过列表 C 中,但这似乎是二次的。还是我错过了什么?
解决方案
根据定义,跳过列表以某种方式排序(例如“按数字递增顺序”或“按姓氏字母顺序”或诸如此类),使用其元素空间的某种总顺序。
对于您的问题,您当然应该假设A和B的排序方式相同,并且您知道这种方式是什么,以便您可以判断A中的给定元素是小于、大于还是与B中的给定元素相同。
如果是这样,那么您可以编写一个循环,在每次迭代中比较每个列表的“下一个”元素。如果A中的“下一个”元素(称为a i)小于B中的“下一个”元素,那么您知道a i没有出现在B中并且小于您尚未检查的任何元素,因此您可以将a i附加到您的结果列表并继续处理 A 的下一个元素。而且,反之亦然。(当然,如果两个元素相等,那么您只需附加一个并继续到每个列表的下一个元素。)
(这对跳过列表不是很具体;您可以使用相同的方法来合并任何两个排序列表,而不管用于实现这些列表的特定数据结构,只要它们以相同的方式排序并且您知道什么就是这样。)
推荐阅读
- python - Odoo webshop 添加输入框
- php - 提取表单数据 PHP
- python - 使用 stdout=subprocess.PIPE 时 Python 子进程挂起
- ms-access - 组合框中的非索引值显示问题
- python - 适用于 Python 的 Azure 开发运维
- node.js - sudo npm install --global 在 Linux 上失败且没有错误消息
- python - 在python中跳过最后一个匹配的字符串
- ansible - Ansible 通过组变量循环到模板 prometheus.yml
- javascript - 如何在返回到 querySelectorAll 函数的元素集合上挂起处理程序?
- python - 在python中枚举带有索引的列表?