java - 有一个算法问题想请教,给定一亿个数,如何用最快的方法取出其中最大的三个数。
迷茫
迷茫 2017-04-18 09:13:57
[Java讨论组]

最近有一个java大神,是蚂蚁支付宝的哦,问了我这么一个问题。我的回答是先将数组分解成两百个小数组或者更多,在开两百个thread进行排序,取最大,然后对这两百个数进行排序,取前三。其实我的思路根本就没有涉及到算法层面,也只是暴力破解。其实这不是最好的做法,因为这样会严重的浪费资源,然后他的回答是堆排序。我的问题是堆排序是怎样实现的,最好用代码体现出来。

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(6)
PHPz

取前三为什么要排序?新开辟三个变量的空间保存中间结果就行了。

这种方法的复杂度是O(nk),n是数据总量,k是要获取的数据数量。排序无论是堆排还是快排都是O(nlogn)。当k小于log(2, 10 ** 8)时还是有优势的,太大了就退化成插入排序了。

黄舟

这不是典型的Top k问题吗,你可以百度一下Top K

大家讲道理

topn的如果说稳妥的答案堆排是没有错的 问题是这个3取的。。。这么小的数

黄舟

就是堆排序a

天蓬老师

topk求解

黄舟

如果想要最快,我觉得位图排序是我见过的最快的了。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号