思路1:排序

class Solution {
public:
    vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
        vector<int> res;
        sort(input.begin(), input.end());
        for (int i = 0; i < k; ++i) res.push_back(input[i]);
        return res;
    }
};
  • 时间复杂度:O(nlogn),空间复杂度:O(n)

思路2:堆

#include <queue>
class Solution {
public:
    vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
        vector<int> res(k, 0);
        if (k == 0) return res;

        priority_queue<int> heap;
        for (int i = 0; i < k; ++i) heap.push(input[i]);

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

        for (int i = 0; i < k; ++i) {
            res[i] = heap.top();
            heap.pop();
        }

        return res;
    }
};

思路3:快速选择

class Solution {
public:
    vector<int> quickSort(vector<int>& arr, int k, int l, int r) {
        int i = l, j = r;
        while (i < j) {
            while (i < j && arr[j] >= arr[l]) j--;
            while (i < j && arr[i] <= arr[l]) i++;
            swap(arr[i], arr[j]);
        }
        swap(arr[i], arr[l]);
        if (i > k) return quickSort(arr, k, l, i-1);
        if (i < k) return quickSort(arr, k, i + 1, r);
        vector<int> res;
        res.assign(arr.begin(), arr.begin() + k);
        return res;
    }

    vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
        if (k >= input.size()) return input;
      	// 搜索并返回最小的 
      k 个数
        return quickSort(input, k, 0, input.size()-1);
    }

};

-时间复杂度:O(n),空间复杂度:O(logn)


alt

😿😿😿😿😿😿