假如有10000个数,如何快速找到前20大的数字呢?
全部评论
先用前20的数构建一个小根堆,然后依次遍历后边的元素与堆顶元素比较,如果大于堆顶元素就替换堆顶元素,所有元素遍历完毕剩下小根堆的元素就算前20大的元素
这道题可以有很多延伸:(1)简单的TopK算法 (2)大文件无法一次加载进内存如何找出TopK数字 (3)大文件找出频率次数最高的K个数字 (4)系统设计:Top-K Hitter找出一定时段内点击量最高的视频、博文
1w个数很小,所以怎么都可以
这不就是常问的 nth_element,或者快速选择。如果明确只有20,写20个 if else 也行
看我Arrays.sort( );一套for循环然后立马回家吃饭
复杂度o(2n),其实是极限求和n+n/2+...,求前k大都是这个复杂度,根本原因是不需要保证数据有序性
那么多数据 内存是否存的下?存的下那就小根堆 当然数值范围小直接桶排, 存不下就要分治。
介不大二作业吗
一把sort排序梭哈
一眼堆,做过好几次了
直接放进map里面,从后往前输入20个
大数据可以用分治思想,分成n份分别做堆排,然后从中选最大的
用小根堆时间复杂度比快排底,但是我自己实测是发现快排比堆快
小根堆
理论上不考虑资源,可以实现O1
小顶堆?
相关推荐
点赞 评论 收藏
分享
点赞 评论 收藏
分享

点赞 评论 收藏
分享
点赞 评论 收藏
分享