class Solution {
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);//assign实现不同容器赋值
return res;
}
void quicksort(vector<int>& arr,int l,int r){
if (l >= r) return;//当长度为1就不排序了
int i=l;
int j=r;
int pivot=arr[l];//以最左边的数为基准
while(i<j){
while(i<j && arr[j]>=pivot) j--;//从右往左找小于基准的数
while(i<j && arr[i]<=pivot) i++;//从左往右找大于基准的数
swap(arr[i],arr[j]);
//调换位置,小的在左边,大的在右边,此时小的之间未排序
}
swap(arr[i],arr[l]); //将基准值放到小值的最右边,即小值和大值的中间
quicksort(arr,l,i-1);
quicksort(arr,i+1,r);
}
};
剑指40:最小k个数
最新推荐文章于 2023-07-01 11:50:23 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)