【问题标题】:Create a list consisting of those integers that appear in both lists创建一个由出现在两个列表中的整数组成的列表
【发布时间】:2015-11-03 21:32:54
【问题描述】:

问题陈述:

设计一个算法,给定两个整数列表,创建一个列表 由出现在两个列表中的整数组成(每个整数 在最终列表上应该只出现一次)。描述你的算法 伪代码的术语侧重于主要算法任务而不是 低级细节。分析算法的运行时间。你 仅当您的算法渐近地达到 比 Θ(n^2) 更好的最坏情况性能,其中 n 是 两个输入列表的长度

有人可以向我解释这个问题实际上要求我做什么吗?

我的尝试:

我的印象是,这个问题告诉我要创建一个包含两个列表 idk 的算法,所以可能有两个数组,一个 A,一个 B,这些数组将填充数字,我会同时采用那些清单并基本上将它们放在一起?我使用 MergeSort 对它们进行排序(现在我认为这可能不是必需的)然后我使用 Merge 将两个列表实际放在一起。

问题:

有人告诉我这是错误的。我想我一定是误解了这个问题。我还使用了归并排序,因为它的 O(nlogn)。
我的答案有什么问题,我错过了什么?

【问题讨论】:

  • "... 创建一个由两个列表中出现的整数组成的列表..." 对我来说似乎很清楚。返回的列表应该只包含在两个输入列表中至少存在一次的数字。我建议对两个输入列表进行排序的解决方案(可能是O(n lg n),除非您可以保证有关输入的其他事实),然后对两个列表进行线性扫描以找到交集(O(n),留下整体算法在O(n lg n))。

标签: algorithm sorting time-complexity computer-science


【解决方案1】:

该问题要求您找到两个列表中的intersection set,或者换句话说 - 一个仅包含同时出现在 A 和 B 中的元素的列表(但不包含仅出现在其中一个中的元素) .

您的算法似乎只是组合列表,因此包含仅出现在一个列表中的元素。

有几种方法可以做到:

  1. 对两个列表排序,然后iterate in parallel
  2. 在哈希表中插入一个列表,然后迭代第二个并打印哈希表中的元素(记得删除找到的元素,避免打印元素两次)
  3. 与 (2) 方法相同,但使用树集代替,以确保 O(nlogn) 最坏情况。

我特意把实现细节模糊了,所以你可以自己解决这个任务。

祝你好运!

【讨论】:

  • 非常感谢您,看来我误解了这个问题。通过使用您提供的方法 1,我可以在第一个列表上使用合并排序,这会给我 O(n),然后我可以在第二个列表上使用合并排序,这可能给我 O(n),然后我可以并行迭代这也将是 O(n),所以我最终将有 O(n) + O(n) + O(n) = O(n)。这听起来在正确的轨道上吗?
  • @Shammy 使用归并排序的排序是O(nlogn)
猜你喜欢
  • 1970-01-01
  • 2020-08-11
  • 1970-01-01
  • 2017-03-27
  • 1970-01-01
  • 2014-06-29
  • 1970-01-01
  • 1970-01-01
  • 2020-02-27
相关资源
最近更新 更多