刷题 | top k问题

包含排序

sort--排全部

冒泡等--排k个 n*k

快排--nlogn的复杂度,但是是在平均的情况下,最糟糕的情况依然是n方


不含排序

随机选择--用快排的思想,但只递归一边 是On(哼哼,某厂面试官还...)

--以最小k个为例,先把前k个 元素建立一个大顶堆(On),然后从k+1开始遍历,如果小于堆顶则替换,并下沉,最糟糕的复杂度是nlogk


大数据的情况 100亿找1000

ok

mapreduce

1.将100亿个数据分为1000个大分区,每个区1000万个数据
2.每个大分区再细分成100个小分区。总共就有1000*100=10万个分区
3.计算每个小分区上最大的1000个数
4.合并每个大分区的100个小分区,得到1000个大分区,找出每个大分区的前1000个数。
5.合并大分区,得到总的区,找出前1000

hash(如果重复度很高)

1. 去重  (附常识 | hashset去重_tuuzkiii_Tuu的博客-CSDN博客
2. 用堆

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值