思路如下:
我们需要维护一个固定的数量大小的堆结构
我们要取一个数组中的最小的几个元素的时候,我们通常维护一个大顶堆
当我们需要取最大的几个元素的时候我们都通常维护一个小顶堆
而在我们的Java的数据结构中实现这一思想的就是我们的优先队列了,会自动的帮我们维护顺序,我们只需要当元素的数量大于这个数量的时候进行出队的操作就好了
(建议看一下堆排序的结构和实现原理,能够明白这个插入和查找数据的时间复杂度等等)
import java.util.*;
public class Solution {
public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
PriorityQueue<Integer> queue = new PriorityQueue<>(
new Comparator<Integer>(){
public int compare(Integer t1, Integer t2){
return t2 -t1;
}
}
);
ArrayList<Integer> list = new ArrayList<>();
if( k > input.length) return list;
for(int num : input){
queue.add(num);
if(queue.size() > k)
queue.poll();
}
while(queue.size()!=0){
list.add(queue.poll());
}
Collections.reverse(list);
return list;
}
}