剑指 Offer 40:最小的k个数(快速排序)

简介: 剑指 Offer 40:最小的k个数(快速排序)

题目

题目链接

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

示例 1:

输入:arr = [3,2,1], k = 2
输出:[1,2] 或者 [2,1]

示例 2:

输入:arr = [0,1,2,1], k = 1
输出:[0]

解题

方法一:快排实现

参考链接

class Solution {
private:
    void quickSort(vector<int>& arr,int l,int r){
        if(l>=r) return;
        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[l],arr[i]);
        quickSort(arr,l,i-1);
        quickSort(arr,i+1,r);
    }
public:
    vector<int> getLeastNumbers(vector<int>& arr, int k) {
        quickSort(arr,0,arr.size()-1);
        vector<int> res;
        res.assign(arr.begin(),arr.begin()+k);
        return res;
    }
};
相关文章
|
7月前
剑指 Offer 51:数组中的逆序对(归并排序)
剑指 Offer 51:数组中的逆序对(归并排序)
43 0
|
7月前
剑指Offer LeetCode 面试题40. 最小的k个数
剑指Offer LeetCode 面试题40. 最小的k个数
40 0
|
7月前
剑指 Offer 11:旋转数组的最小数字
剑指 Offer 11:旋转数组的最小数字
54 1
|
7月前
剑指 Offer 45:把数组排成最小的数
剑指 Offer 45:把数组排成最小的数
31 0
|
7月前
剑指 Offer 42:连续子数组的最大和
剑指 Offer 42:连续子数组的最大和
43 0
|
7月前
「LeetCode」剑指 Offer 40. 最小的k个数
「LeetCode」剑指 Offer 40. 最小的k个数
57 0
|
7月前
leetcode 剑指 Offer 40. 最小的k个数
leetcode 剑指 Offer 40. 最小的k个数
36 0
|
算法
【面试必刷TOP101】链表相加 & 单链表的排序
【面试必刷TOP101】链表相加 & 单链表的排序
44 0
|
算法 C++ 容器
剑指Offer - 面试题40:最小的k个数
剑指Offer - 面试题40:最小的k个数
60 0
归并排序应用——剑指 Offer 51. 数组中的逆序对
归并排序应用——剑指 Offer 51. 数组中的逆序对
61 0