在一个整数数组中找到最上面的log(n)或最上面的sqt(n)个值

Find top log(n) or top sqt(n) values in an array of integers

本文关键字:个值 sqt log 一个 整数 数组      更新时间:2023-10-16

你明白这个问题的意思吗

在小于线性时间的整数数组中找到最顶端的log(n)或最顶端的sqt(n)个值。

如果你不知道,问题是http://www.careercup.com/question?id=9337669。

你能帮我理解这个问题,然后可能解决它吗?(虽然一旦我明白了,我可能也会得到解决)

感谢您的宝贵时间。

对于非排序数组,复杂度是线性的,但可以通过观察log(n)和sqrt(n)都是单调增长函数来提高性能,因此max(log(n),…)也是log(max(n,…)),对于sqrt也是如此。

所以只要找到max(n)(线性)然后计算log和sqrt

假设数组未排序,此问题为Omega(n),因为您需要读取所有元素[查找max是非排序数组中的Omega(n)问题,并且此问题并不比查找max更容易]。因此,它不存在次线性解

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.

(*)如果数组包含重复,则此伪代码是不正确的,但是在第二步中修剪重复是相当容易的。