输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。
题解:
快速排序思想
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
ArrayList<Integer> list = new ArrayList<Integer>();
if (k==0 || k > input.length) return list;
int index = partition(input,0,input.length - 1);
while(index != (k-1)){
if(index > (k-1)){
index = partition(input,0,index - 1);
}
else{
index = partition(input,index + 1,input.length - 1);
}
}
for(int i=0;i<=index;++i){
list.add(input[i]);
}
return list;
}
public static int partition(int[] input,int left,int right){
int i = left;
int j = right+1;
int pivot = input[left];
while(true){
while(i < right && input[++i] < pivot);
while(j > 0 && input[--j] > pivot);
if(i >= j){
break;
}else{
int temp = input[j];
input[j] = input[i];
input[i] = temp;
}
}
input[left] = input[j];
input[j] = pivot;
return j;
}
}