你明白这个问题是什么意思
在小于线性时间内查找整数数组中的顶部log(n)或top sqt(n)值。
如果不这样做,则问题为http://www.careercup.com/question?id=9337669。
请您帮助我理解这个问题,然后可以解决它。 (虽然一旦我理解,我也可以解决它)
感谢您的时间。
答案 0 :(得分:6)
对于非排序数组,复杂度是线性的,但可以通过观察log(n)和sqrt(n)都是单调增长函数来提高性能,因此max(log(n),... )也是log(max(n,...))和sqrt相同。
所以只需找到max(n)(线性)并计算log和sqrt。
答案 1 :(得分:3)
假设数组没有排序,这个问题是Omega(n)
,因为你需要读取所有元素[在非排序数组中找到max Omega(n)
问题,这个问题并不容易找到最大。所以,它没有次线性解决方案。
O(n)
[线性]解决方案
1. find the log(n) biggest element. //or sqrt(n) biggest element...
2. scan the array and return all elements bigger/equal it.
(*)如果数组包含dupes,则此伪代码不正确,但在第二步中修剪欺骗相当容易。