c_cpp 得到数组中的最小k数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 得到数组中的最小k数相关的知识,希望对你有一定的参考价值。

// key idea: use max heap not min heap!!!! And the max heap is declared using less<int> for priority_queue
// maybe confusing
// time: build heap O(k), scan the rest n-k numbers takes O((n-k)logk),
// so, overall, time is O(nlogk), space is k.

// idea 2: use quick selection algorithm

vector<int> get_min_k_numbers(vector<int> &A, int k) {
	if(k >= A.size()) return A;
	vector<int> res;
	if(A.empty() || k == 0) return res;
	// should be less<int>, q is a max heap
	priority_queue<int, vector<int>, less<int>> q; 
	for(int i=0; i<A.size(); i++) {
		if(i < k) q.push(A[i]);
		else {
			int t = q.top();
			if(A[i] < t) {
				q.pop();
				q.push(A[i]);
			}
		}
	}
	while(!q.empty()) {
		res.push_back(q.top());
		q.pop();
	}
	return res;
}

以上是关于c_cpp 得到数组中的最小k数的主要内容,如果未能解决你的问题,请参考以下文章

查找数组中的最小更改数以进行 k 算术级数

c_cpp 找到大量数字中最大的k数。您无法对数组进行排序。

c_cpp 给出一个窗口大小K和一个大小为N的数组,找到每个窗口滑过数组时的最小值

b_lc_数组中最大数对和的最小值(排序+思维 | 进阶:第k)

查找数组中的 K 个最小元素

c_cpp 非排序数组中的最小元素