我在其他网站上遇到过以下面试问题:
收件箱中会收到一堆电子邮件。你想发送所有的 发件人地址到某个服务器。你可以分批发送它们(每个 批量包含一堆发件人电子邮件地址)。限制 是没有批次可以包含重复的电子邮件地址。你好吗? 编写程序以批量发送所有电子邮件地址 它需要最少的批次数。
分析复杂性
我喜欢的答案涉及将电子邮件放入二叉搜索树(从而删除重复项),然后将其序列化并发送。这将只发送一个批次,并且是O(n * log n)时间。有人愿意用更好的解决方案来加入吗?
答案 0 :(得分:3)
您可以使用哈希,首先检查特殊名称是否在哈希值中,如果没有,您将把它放入哈希并将其添加到批处理中。这是平均O(n),但您当前的方法是O(n logn)。
您当前的方法是O(n log n),因为创建二叉树需要O(n logn),因为您使用任何比较基算法都无法阻止n log n
障碍。
关于散列函数,它平均需要O(n)。总之,它比速度排序方法更好,但它可能需要太大的空间,你应该考虑你的数据格式。