一尘不染

两个字符串列表的交集

algorithm

我有以下几条面试问题:

给定两个无序客户列表,返回两个列表的交集的列表。也就是说,返回出现在两个列表中的客户列表。

我建立的一些东西:

  • 假设每个客户都有一个唯一的名称
  • 如果两个列表中的名称相同,则是同一位客户
  • 名称的形式为名字,姓氏
  • 没有II,Jr,奇怪字符等的诡计。

我认为关键是要找到一种有效的算法/使用数据结构来尽可能高效地做到这一点。

我的进度是这样的:

  • 将一个列表读到内存中,然后一次读取另一个列表,以查看是否有匹配项
  • 按字母顺序排列两个列表,然后从一个列表的顶部开始,查看每个项目是否出现在另一列表中
  • 将两个列表都放入有序列表,然后使用较短的列表逐项检查(这样,一个列表有2个项目,您只需检查这2个项目)
  • 将一个列表放入哈希中,然后检查另一个列表中是否存在键

面试官一直问:“下一步呢?”,所以我想我还缺少其他东西。

还有其他技巧可以有效地做到这一点吗?

旁注,这个问题在python中,而我只是读到about sets,它似乎尽可能有效地做到了这一点。知道什么是数据结构/算法sets吗?


阅读 178

收藏
2020-07-28

共1个答案

一尘不染

  1. 将一个列表放入Bloom过滤器中,然后使用它过滤第二个列表。
  2. 将已过滤的第二个列表放入Bloom过滤器中,并使用该过滤器过滤第一个列表。
  3. 对两个列表进行排序,并通过上述方法之一找到交点。

这种方法的好处(除了允许您在采访中正确使用半模糊数据结构外)是,在您(很有可能)减小问题的大小之前,不需要任何O(n)存储。


面试官一直问:“下一步呢?”,所以我想我还缺少其他东西。

也许他们会一直问这个问题,直到您用尽答案为止。


http://code.google.com/p/python-bloom-
filter/是Bloom过滤器的python实现。

2020-07-28