设计一个算法,找出数组中最小的k个数。以任意顺序返回这k个数均可。
示例:
输入: arr = [1,3,5,7,2,4,6,8], k = 4
输出: [1,2,3,4]
提示:
0 <= len(arr) <= 100000
0 <= k <= min(100000, len(arr))
class Solution {
public:
void quick_find(vector<int>& arr,int l,int r, int k)
{
if(l>=r) return;
int ll = l, rr = r, t = arr[l];
while(ll<rr)
{
while(ll<rr&&arr[rr]>=t) rr--;
swap(arr[ll],arr[rr]);
while(ll<rr&&arr[ll]<=t) ll++;
swap(arr[ll],arr[rr]);
}
if(ll>=k){
quick_find(arr, l, ll, k);
}
else{
quick_find(arr, ll+1, r, k);
}
}
vector<int> smallestK(vector<int>&