站长网 大数据 N个数,求第K大数

N个数,求第K大数

今天同学给我出了一道题是这样的: 有n个不重复的数,这n个数可以放入内存中,让你用最快的方法找到第k大的数。 解答: 一般情况我们可能考虑,先将n个数排序(快排序、堆排序),然后可以得到结果。但是当n很大时这样做的效率会很低。所以我们提出一种更

今天同学给我出了一道题是这样的:

有n个不重复的数,这n个数可以放入内存中,让你用最快的方法找到第k大的数。

解答:

一般情况我们可能考虑,先将n个数排序(快排序、堆排序),然后可以得到结果。但是当n很大时这样做的效率会很低。所以我们提出一种更高效的方法:

利用快速排序的特点:第一遍排序会确定一个数的位置,这个数左边都比它大,右边都比他小(降序),当左边区间大于K时,说明我们求的第K大数在左边区间,这时我们可以舍弃右边区间,将范围缩小到左边区间从而重复上述过程,直到确定一个数的位置时,左边区间的小是K-1那么这个数字就是我们所求。右边同理。

?

分析:能够使用这种方法的前提条件是:n个数不能重复。如果n个数中有重复,那么区间的大小不能保证就是第K大。

例如:

444433221:其中3是第二大数,但是他的左边有4个数。

所以当题目变成:有n个重复的数,求第K大数时,我们不能直接用上面的方法。

那么我们改怎么解决呢?

去掉重复!

去掉重复的方法有很多大家可以选择自己喜欢的方法。我个人比较推荐使用Hash。我们可以用HASH判重来将重复的数据去掉。然后再使用上述方法。

本文来自网络,不代表站长网立场,转载请注明出处:https://www.tzzz.com.cn/html/shuju/2021/0527/7175.html

作者: dawei

【声明】:站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。
联系我们

联系我们

0577-28828765

在线咨询: QQ交谈

邮箱: xwei067@foxmail.com

工作时间:周一至周五,9:00-17:30,节假日休息

返回顶部