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数