方法一:排序

将输入的数组进行排序,取前 K个值即可

时间复杂度:O(nlongk)

空间复杂度:O(1)

class Solution {
  public:
    vector<int> GetLeastNumbers_Solution(vector<int>& input, int k) {
        vector<int> res;
        //特殊情况处理
        if (k == 0 || k > input.size())
            return res;
	  	//排序
        sort(input.begin(), input.end());

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

        return res;
    }
};

方法二:堆排序

设置一个大小为K的优先队列,将输入数组插入到优先队列中,最终就得到前K个大小的数组

时间复杂度:O(nlongk)

空间复杂度:O(k)

class Solution {
  public:
    vector<int> GetLeastNumbers_Solution(vector<int>& input, int k) {
        vector<int> res;
        //特殊情况处理
        if (k == 0 || k > input.size())
            return res;
        //大顶堆
        priority_queue<int, vector<int>> temp;

        for (int i = 0; i < input.size(); i++) {
            if (i < k)
                temp.push(input[i]);
            else {
                if (input[i] < temp.top()) {
                    temp.pop();
                    temp.push(input[i]);
                }
            }
        }

        while (!temp.empty()) {
            res.push_back(temp.top());
            temp.pop();
        }

        return res;
    }
};