c_cpp 找到大量数字中最大的k数。您无法对数组进行排序。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 找到大量数字中最大的k数。您无法对数组进行排序。相关的知识,希望对你有一定的参考价值。
// find largest k, should use min heap
// if find smallest k, should use max heap
vector<int> find_largest_k_numbers(vector<int>& A, int K) {
vector<int> res;
if(A.empty() || K == 0 || K > A.size()) return res;
if(K == A.size()) return A;
// note, the default STL priority_queue is a max heap declared as:
// priority_queue<int, vector<int>, less<int>> max_heap;
priority_queue<int, vector<int>, greater<int>> min_heap;
for(int i=0; i<K; ++i) {
min_heap.push(A[i]);
}
for(int i=K; i<A.size(); ++i) {
if(A[i] > min_heap.top()) {
min_heap.pop();
min_heap.push(A[i]);
}
}
for(int d : min_heap)
res.push_back(d);
return res;
}
以上是关于c_cpp 找到大量数字中最大的k数。您无法对数组进行排序。的主要内容,如果未能解决你的问题,请参考以下文章
Top k 问题
LeetCode 334. 递增的三元子序列 / 747. 至少是其他数字两倍的最大数 / 373. 查找和最小的K对数字(多路归并滑动窗口+二分)
321. 拼接最大数
在 n 个项目的数组中找到 k 个最小数字的算法
c_cpp 得到数组中的最小k数
查找未排序数组中的最大K数