import java.util.*; public class Solution { public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) { ArrayList<Integer> res = new ArrayList<>(); int len = input.length; if(len < k || k == 0){ return res; } // java优先队列默认是小顶堆,我们要设置为大顶堆 // 这里用的lambda表达式实现比较器接口 Queue<Integer> pq = new PriorityQueue<>(k,(a, b)->(b-a)); for(int i = 0; i < len; i++){ // 队列没满时,需要加满 if(pq.size() < k){ pq.add(input[i]); }else{ // 队列满了即i>=k时,需要开始判断,当前值小于堆顶时需要加入队列 if(input[i] < pq.peek()){ pq.poll(); pq.add(input[i]); } } } res.addAll(pq); return res; } }