用一个长度为K大根堆来维护这个最小的k个数。如果一个数比大根堆的堆顶小,说明它在最小的k个数里面。
可以用Java的优先队列(底层是堆)设定优先级来实现!
public ArrayList<Integer> GetLeastNumbers_Solution(int [] nums, int k) {
if (k > nums.length || k <= 0) return new ArrayList<>();
PriorityQueue<Integer> maxHeap = new PriorityQueue<>((o1, o2) -> o2 - o1);
for (int num : nums) {
maxHeap.add(num);
if (maxHeap.size() > k) {
maxHeap.poll();
}
}
ArrayList<Integer> ret = new ArrayList<>(maxHeap);
return ret;
}