在一个整数数组中找到最上面的log(n)或最上面的sqt(n)个值
Find top log(n) or top sqt(n) values in an array of integers
你明白这个问题的意思吗
在小于线性时间的整数数组中找到最顶端的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.
(*)如果数组包含重复,则此伪代码是不正确的,但是在第二步中修剪重复是相当容易的。
相关文章:
- 获取向量C++中第一个值和最后一个值的和
- 如何在 C/C++ 中生成具有 n 组 5 个值(重复项)的所有可能排列的矩阵
- C++递归来决定数组中的两个值
- 运算符 [] 重载更新 2 个值 c++
- 我正在尝试根据 4 个方程找出六个值
- 如何在C++向量中解压缩多个值
- 单个变量如何存储多个值?
- 如何创建具有多个值的多个变量
- 从 AVL 树中删除指向 1 个或多个值的键
- 为什么 getch 在按下函数或箭头键时返回三个值?
- 为什么断点显示数组的第二个值是一个大数字?额外学分工作
- 具有多个值的无序列图及其查找
- 从递归函数 C++ 返回多个值
- 如何将 txt 文件中的多个值输入到数组C++中
- 将多个值插入到特定位置的矢量中
- Visual Studio(C++):如何使用TCP套接字发送多个值
- 使用函数的元组返回多个值的问题
- C++:如何使用传递引用在一个方法中返回多个值
- 如何有效地用第二个值对向量对进行分组
- 在一个整数数组中找到最上面的log(n)或最上面的sqt(n)个值