题目描述
给定一个数组,找出其中最小的K个数。例如数组元素是4,5,1,6,2,7,3,8这8个数字,
则最小的4个数字是1,2,3,4。如果K>数组的长度,那么返回一个空的数组
样例输入输出
输入
[4,5,1,6,2,7,3,8],4
返回值
[1,2,3,4]
解决方法
方法一
利用最大堆保存这k个数,每次只和堆顶比,如果比堆顶小,删除堆顶,新数入堆。
import java.util.*;
public class Solution {
public ArrayList<Integer> GetLeastNumbers_Solution(int[] input, int k) {
ArrayList<Integer> res = new ArrayList<>();
if (input == null || k <= 0 || k > input.length) {
return res;
}
Queue<Integer> queue = new PriorityQueue<>(k, Collections.reverseOrder());//创建一个优先队列,把他当成最大堆,按照降序排序
f