(面试遇到了这个问题)
基本:
先构造K个数的最小堆;
然后遍历一亿个数,每次和堆中最小数进行比较,如果更大则往堆中插入该数;
升级:
采用分治的办法,使用将一亿个数分成N份,然后采用多线程或者多台服务器,分别得到N份最大K个最大的数;
然后对N*K个数求最大的K个数。
(面试遇到了这个问题)
基本:
先构造K个数的最小堆;
然后遍历一亿个数,每次和堆中最小数进行比较,如果更大则往堆中插入该数;
升级:
采用分治的办法,使用将一亿个数分成N份,然后采用多线程或者多台服务器,分别得到N份最大K个最大的数;
然后对N*K个数求最大的K个数。