/** 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4
*/
public static ArrayList<Integer> GetLeastNumbers(int[] input,int k){
ArrayList<Integer> resultList = new ArrayList<Integer>();
if (input.length<=0 || k<= 0 ){
return resultList;
}
int h = 1;
PriorityBlockingQueue<Integer> queue = new PriorityBlockingQueue<Integer>(
h, new Comparator<Integer>(){
public int compare(Integer o1,Integer o2){
return o2.compareTo(o1);
}
}
);
for (int i = 0;i<input.length;i++){
if(i<k){
queue.add(input[i]);
}else {
if (queue.peek()>input[i]){
queue.poll();
queue.add(input[i]);
}
}
}
while (!queue.isEmpty() && queue.size()<=k){
resultList.add(queue.poll());
}
Collections.reverse(resultList);
return resultList;
}
public static ArrayList<Integer> GetLeastNumbers(int[] input,int k){
ArrayList<Integer> resultList = new ArrayList<Integer>();
if (input.length<=0 || k<= 0 ){
return resultList;
}
TreeSet<Integer> set = new TreeSet<>(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2.compareTo(o1);
}
});
for (int i = 0;i<input.length;i++){
if (i<k){
set.add(input[i]);
}else{
if(set.first()>input[i]){
set.remove(set.first());
set.add(input[i]);
}
}
}
if (!set.isEmpty()){
resultList.addAll(set);
}
Collections.reverse(resultList);
return resultList;
}