输入整数数组 arr
,找出其中最小的 k
个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。
class Solution {
public int[] getLeastNumbers(int[] arr, int k) {
if(k >= arr.length){
return arr;
}
return quickSort(arr,k,0,arr.length-1);
}
public int[] quickSort(int[] arr,int k,int l,int r){
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);
if(i > k){
return quickSort(arr,k,l,i-1);
}
if(i < k){
return quickSort(arr,k,i+1,r);
}
return Arrays.copyOf(arr,k);
}
public void swap(int[] arr,int i,int j){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
执行用时:2 ms, 在所有 Java 提交中击败了92.14%的用户
内存消耗:41.9 MB, 在所有 Java 提交中击败了78.37%的用户
通过测试用例:39 / 39