【Leetcode】面试题40. 最小的k个数(每日一题)

题目链接:最小的k个数


题意:输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。


题解:感觉应该是第二次做了。。最简单的想法就是,sort排序。

但是加了一个堆的做法,但是不是用手写堆,用的优先队列。

然而我堆跑的比sort慢。。


代码:

class Solution {
public:
    vector<int> getLeastNumbers(vector<int>& arr, int k) {
        vector<int> ans;
        if(k == 0)  return ans;
        sort(arr.begin(),arr.end());

        
        for(int i = 0;i < k;i++){
            ans.push_back(arr[i]);
        }

        return ans;
    }
};


OR


class Solution {
public:
    vector<int> getLeastNumbers(vector<int>& arr, int k) {
        vector<int> ans;
        if(k == 0)  return ans;

        priority_queue<int,vector<int>,less<int>> q;
        
        for(int i = 0;i < arr.size();i++){
            q.push(arr[i]);
            if(q.size() > k)    q.pop();
        }
        for(int i = 0 ;i < k;i++){
            ans.push_back(q.top());
            q.pop();
        }

        return ans;
    }
};

猜你喜欢

转载自www.cnblogs.com/Asumi/p/12535804.html