剑指 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;
    }
};
相关文章
|
6月前
剑指 Offer 51:数组中的逆序对(归并排序)
剑指 Offer 51:数组中的逆序对(归并排序)
38 0
|
6月前
剑指 Offer 11:旋转数组的最小数字
剑指 Offer 11:旋转数组的最小数字
47 1
|
6月前
剑指 Offer 45:把数组排成最小的数
剑指 Offer 45:把数组排成最小的数
31 0
|
6月前
剑指 Offer 42:连续子数组的最大和
剑指 Offer 42:连续子数组的最大和
40 0
|
6月前
剑指 Offer 59 - I:滑动窗口的最大值
剑指 Offer 59 - I:滑动窗口的最大值
44 0
|
6月前
「LeetCode」剑指 Offer 40. 最小的k个数
「LeetCode」剑指 Offer 40. 最小的k个数
52 0
|
6月前
leetcode 剑指 Offer 40. 最小的k个数
leetcode 剑指 Offer 40. 最小的k个数
33 0
|
11月前
|
C++ 索引
LeetCode239|剑指 Offer 59 - I. 滑动窗口的最大值
前言 看到滑动窗口以及示例,很容易被思维局限了,然后呢就开始打框架,用一个for循环,i-i+3这样的范围一直移动,但是每次都要比较这3个值的大小,如何比较呢?用类似之前T155的栈一样比较吧。但是存在一个问题,有些值就重复2-3次,似乎没有这个必要。
27 0
归并排序应用——剑指 Offer 51. 数组中的逆序对
归并排序应用——剑指 Offer 51. 数组中的逆序对
59 0