题解 | #最小的K个数#
最小的K个数
https://www.nowcoder.com/practice/6a296eb82cf844ca8539b57c23e6e9bf
import java.util.ArrayList;
public class Solution {
ArrayList<Integer> arrayList = new ArrayList();
public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
if(input.length>0){
//先快排,再获取值
qsort(input,0,input.length-1);
for(int i2= 0;i2<k;i2++)
{
arrayList.add(input[i2]);
}
return arrayList;}
else{
return arrayList;
}
}
public void qsort(int []a,int l,int r){
int mid = a[l];
int left = l;
int right = r;
int temp =0;
int i=0;
while(left<right){
//右边找到比a[l]小的第一个数;和a[l]相等的数不移动,比mid大的数不断后移
//先right--能确保left和right相等时a[left]<=a[mid],上一轮已经比较替换
while(a[right]>=mid&&left<right){
right--;
}
//左边找到比a[l]大的第一个数;和a[l]相等的数不移动,比mid小的数不断前移
while(a[left]<=mid&&left<right){
left++;
}
temp = a[left];
a[left] = a[right];
a[right] = temp;
}
//最左边的数a[l]和a[left]替换,一次递归只确定一个数a[l]的位置
temp = a[left];
a[left] = a[l];
a[l] = temp;
if(left>l){
qsort(a,l,left-1);
}
if(right<r){
qsort(a,right+1,r);
}
}
}
查看8道真题和解析
