场景题

本文精选了面试中常见的算法场景题,如从10亿个数中找最大100个,100GB文件中找出现次数最多的100个IP,海量数据中找出现次数最多的数据,以及如何找出两个文件中共有的URL,提供了详细的解决思路和优化方案。
摘要由CSDN通过智能技术生成

记一下常见的场景题,因为昨天面阿里的时候问了一道开放题,有点没有思路,所以将常见的场景题了解下不至于下次面试的时候手足无措吧

 

1.从10亿个数里面找出最大的100个数

    首先用100个数去建立堆,建成最小堆,然后剩下的数分别和堆顶元素比较,如果比堆顶元素小,则直接抛弃,如果比堆顶元素大,那么就用这个元素替换掉堆顶元素,然后进行堆的调整,当所有元素都比较完成,则堆里面的100个数就是最大的100个数

   优化方法:将10亿个元素分组存放,分成1000组,放到1000个文件中,然后在每个文件中建立一个堆,堆的数量是100个,然后统计每个文件里的前100个最大的数,最后,对这1000个堆再进行合并找出里面最大的100个数

 

2.100GB的文件中找出出现次数最多的100个ip

   首先将所有ip的hashcode值对1000求模放在1000个文件中,然后再对每个文件中的ip进行hashmap来统计出现次数,按照出现次数放入个数为100的最小堆里,然后再对所有的最小堆进行合并选出最大的100个ip

 

3.海量数据,找出出现次数最多的数据

   先将数据取出来放入n个文件中,然后在每个文件中找到最大的那个数据,然后找出n个文件里出现次数最多的那个数据

 

 

给你A,B两个文件,各存放50亿条URL,每条URL占用64字节,内存限制是4G,让你找出A,B文件共同的URL?

      使用布隆过滤器,先将其中一个文件的所有url用布隆过滤器进行映射处理,然后挨个读取另一个文件的url,进行检查,如果布隆过滤器中有的话,就是同一个url

 

 

   

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>