简直不要太简单了这道题,先给数组排个序,然后输出前k个数就好了。我用的是快排,这是我的代码:
class Solution {
public int[] getLeastNumbers(int[] arr, int k) {
int n = arr.length;
quickSort(arr, 0, n-1);
int[] res = new int[k];
for(int i =0;i<k;i++){
res[i] = arr[i];
}
return res;
}
private void quickSort(int[] arr, int l, int r){
if(l>=r)return;
int i = l;int j = r;
int key = arr[i];
while(i<j){
while(arr[j] >= key && i<j)j--;
while(arr[i] <= key && i<j)i++;
if(i<j){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
arr[l] = arr[i];
arr[i] = key;
quickSort(arr, l, i-1);
quickSort(arr, i+1, r);
}
}
题解除了这种方法,还有一种方法用的是优先队列,先取前k个数放进优先队列,然后往后遍历,如果这个数小于队列顶部,就出队把这个数放进队列,最后把队列里的k个数放进数组返回就可以了。