今天面试的一道算法题,求解
有10G 的日志文件 存储格式为 [cmd:from:abc@163.com,to:123@qq.com]
设计一个算法,求出由163域发出的邮件,接受最多的前50个域
如 abc@163.com 发到 123@qq.com 如果QQ邮箱接受是前50多的,则显示出来,并且显示有多少条是从163到QQ的
我想到的是用multimap容器来存储信息~~
求解答
[解决办法]
你这格式是固定的吗??你那存储格式是固定的一行还是二进制?你的[]是格式的一部分吗?
字符串解析用sscanf,格式用"cnd:form:%s@%s,to:%s@%s", a1, a2, a3, a4
a2和a4就是163和qq
[解决办法]
O(n),扫一遍, 关键是不要做重复扫描:
1, 边扫边收集, 将(From:username@163 ,To:username@some_domain)的信息收集到一个some domain的一个容器中.
2, 扫完之后, 根据每个容器的尺寸从小到大排序, 然后前50个容器就是结果,每个容器里之前存储了(From:username@163 ,To:username@some_domain)的信息。
[解决办法]
map<接收域名,数量>。扫描完结果就出来了。