列表

详情


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;
    }
};

上一题