找到最小的k个数,用大顶堆的方法。弄一个长度为k的大顶堆,当全部遍历完之后,留在大顶堆内部的即为最小的k个。在遍历过程中,如果比当前大顶堆的最大值小,就弹出,换这个新的。
import java.util.*;
public class Solution {
public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
//用大顶堆 其实就是一个优先队列
if(input.length<k||k<1){
return new ArrayList<>();
}
PriorityQueue<Integer> queue = new PriorityQueue<>((o1,o2)->o2-o1);
for(int num : input){
if(queue.size()<k){
queue.add(num);
continue;
}
if(queue.size()>=k && queue.peek()>num){
queue.poll();
queue.add(num);
}
}
return new ArrayList<>(queue);
}
}