最小的k个数
题目描述
输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。
思路
使用快速排序将数组进行排序,然后输出前k个数即可。
避坑:注意要加判断,对输入的k可能会出现越界的情况,比如k=0和k>input.length的情况要单独列出!!!
import java.util.ArrayList;
import java.util.Arrays;
public class Solution {
public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
// Arrays.sort(input);
QuickSort(input,0,input.length-1);
ArrayList<Integer> list = new ArrayList<>();
if(k == 0 || k > input.length){
return list;
}else{
for(int i = 0;i<k;i++){
list.add(input[i]);
}
}
return list;
}
public static void QuickSort(int[] arr,int low ,int high){
int temp,i,j,t;
if(low>high){
return;
}
i = low;
j = high;
temp = arr[low];
//先看右边,依次往左递减
while(i<j){
while(arr[j]>=temp && i<j ){
j--;
}
//再看左边,依次往右递增
while(arr[i]<=temp && i<j){
i++;
}
//如果满足条件则交换
if(i < j){
t = arr[j];
arr[j] = arr[i];
arr[i] = t;
}
}
//最后将基准为与i和j相等位置的数字交换
arr[low] = arr[i];
arr[i] = temp;
//递归调用左半数组
QuickSort(arr,low,i-1);
//递归调用右半数组
QuickSort(arr,i+1,high);
}
}