剑指 Offer 40. 最小的k个数

思路
排序(快排)
代码
class Solution {
public int[] getLeastNumbers(int[] arr, int k) {
quickSort(arr,0,arr.length-1);
return Arrays.copyOf(arr,k);
}
public void quickSort(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,j);
}
swap(arr,i,l);
quickSort(arr,l,i-1);
quickSort(arr,i+1,r);
}
public void swap(int[] arr,int i,int j){
int tmp=arr[i];
arr[i]=arr[j];
arr[j]=tmp;
}
}
这篇博客介绍了如何使用快速排序算法的变种——快速选择,来找到数组中最小的k个数。通过实现`quickSort`和`swap`辅助函数,实现了在不完全排序数组的情况下找出前k小的元素。这种方法的时间复杂度为O(n)期望时间,对于大数据集具有较高的效率。
638

被折叠的 条评论
为什么被折叠?



