我有一个面试问题:
给出两个无序客户列表,返回两个列表的交集列表。也就是说,返回两个列表中显示的客户列表。
我建立的一些事情:
我认为重点是找到一种有效的算法/使用数据结构来尽可能高效地完成这项工作。
我的进步是这样的:
面试官一直在问,“下一步是什么?”,所以我认为我错过了其他的东西。
有效地执行此操作的其他任何技巧?
旁注,这个问题是在python中,我刚刚阅读了sets
,它似乎尽可能有效地做到了这一点。知道sets
的数据结构/算法是什么吗?
答案 0 :(得分:5)
它的实现方式真的无关紧要......但我相信它是用C实现的,因此它更快更好set([1,2,3,4,5,6]).intersection([1,2,5,9])
可能是他们想要的
在python可读性计数很多! python中的set操作被广泛使用并且经过了很好的审查......
说另一种pythonic方式是
list_new = [itm for itm in listA if itm in listB]
或
list_new = filter(lambda itm:itm in listB,listA)
基本上我相信他们正在测试你是否熟悉python,而不是你能实现算法。因为他们问了一个非常适合python的问题
答案 1 :(得分:1)
这种方法的好处(除了让你在访谈中正确使用半模糊的数据结构)是它不需要任何O(n)存储,直到你有(很有可能)减少问题的大小
面试官一直在问,“下一步是什么?”,所以我认为我错过了其他的东西。
也许他们会一直问这个问题,直到你的答案用完为止。
http://code.google.com/p/python-bloom-filter/是bloom过滤器的python实现。