原文:O(N)的时间寻找最大的K个数

寻找N个数中最大的K个数,本质上就是寻找最大的K个数中最小的那个,也就是第K大的数。 可以使用二分搜索的策略来寻找N个数中的第K大的数。对于一个给定的数p,可以在O N 的时间复杂度内找出所有不小于p的数。 寻找第k大的元素: 如果所有N个数都是正整数,且它们的取值范围不太大,可以考虑申请空间,记录每个整数出现的次数,然后再从大到小取最大的K个。比如,所有整数都在 , MAXN 区间中的话,利用一 ...

2012-08-06 10:59 4 13700 推荐指数:

查看详情

算法题004 寻找最大K个数

寻找最大K个数 题目描述   有很多个无序的数,怎么选出其中最大的若干个数?   即,从n个数中选出最大K个数。 解法一   先假设元素的数量不大,例如在几千个左右,在这种情况下,我们就排序吧。   在这里,快速排序或堆排序都是不错的选择,他们的平均时间复杂度都是O ...

Tue Mar 12 08:37:00 CST 2013 0 6403
寻找最大K个数,Top K问题的堆实现

寻找最大K个数,如果所有的数据全部可以放入内存,就可以使用random select算法在线性时间寻找K大的数,再得到最大K个数。 参考:http://www.cnblogs.com/luxiaoxun/archive/2012/08/06/2624799.html 如果不能把 ...

Tue Sep 11 18:09:00 CST 2012 2 7790
找出N个数中最小的k个数问题(复杂度O(N*logk))

这是一个经典的算法题,下面给出的算法都在给定的数组基础上进行,好处时不用分配新的空间,坏处是会破坏原有的数组,可以自己分配新的空间以避免对原有数组的破坏。 思路一 先直接排序,再取排序后数据的前k个数。 排序算法用最快的堆排序,复杂度也会达到O(N*logN). 当k ...

Sun Nov 03 22:49:00 CST 2013 15 5832
N个降序数组,找到最大K个数

问题定义 这个问题来自网上看到的百度算法题,感觉很不错,问题定义如下: 假定有20个有序数组,每个数组有500个数字,降序排列,数字类型32位uint数值,现在需要取出这10000个数字中最大的500个,怎么做? 解决方法 这里其实有很多解决方法,笨拙的或者巧妙的。这里介绍一个非常不错 ...

Thu Jun 19 00:19:00 CST 2014 0 3445
求1到n的质数个数O(n)

也许更好的阅读体验 \(\mathcal{AIM}\) 我们知道: 对于一个合数\(x\) 有\(x=p^{a_1}_1*p^{a_2}_2*...*p^{a_n}_n\) 现在给出一个\(n\) 求\(x\in[1,n]\),所有\(x\)分解出的\(p\)的幂数和 例如 \(n=12\) \(2=2^1\) \(3=3^1\) \(4=2^2\) \(5=5^1\) \(6=2^1*3^ ...

Sun Jun 02 05:24:00 CST 2019 0 529
 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM