OR28. 无序数组中最小的k个数
描述
对于一个无序数组,数组中元素为互不相同的整数,请返回其中最小的k个数,顺序与原数组中元素顺序一致。
给定一个整数数组A及它的大小n,同时给定k,请返回其中最小的k个数。
[1,2,4,3],4,2
返回:[1,2]
C++ 解法, 执行用时: 2ms, 内存消耗: 348KB, 提交时间: 2017-07-24
bool cmp1(pair<int,int> a,pair<int,int> b){ return(a.first<b.first); } bool cmp2(pair<int,int> a,pair<int,int> b){ return(a.second<b.second); } class KthNumbers { public: vector<int> findKthNumbers(vector<int> A, int n, int k) { // write code here vector<pair<int,int>> Atmp; vector<pair<int,int>> restmp; vector<int> res; for(int i=0;i<A.size();i++){ Atmp.push_back(pair<int,int>(A[i],i)); } sort(Atmp.begin(),Atmp.end(),cmp1); for(int i=0;i<k;i++){ restmp.push_back(Atmp[i]); } sort(restmp.begin(),restmp.end(),cmp2); for(int i=0;i<k;i++){ res.push_back(restmp[i].first); } return res; } };
C++ 解法, 执行用时: 3ms, 内存消耗: 440KB, 提交时间: 2022-07-25
class KthNumbers { public: vector<int> findKthNumbers(vector<int> A, int n, int k) { // write code here priority_queue<int> q; unordered_map<int,int> h; for(int i = 0; i<A.size(); i++) { if(q.size()<k || q.top()>A[i]) { q.push(A[i]); h[A[i]] = i; if(q.size()>k) { h.erase(q.top()); q.pop(); } } } vector<int> res; for(int i=0; i<A.size(); i++) { if(h.count(A[i])!=0) res.push_back(A[i]); } return res; } };