41.最小的k个数

输入 n 个整数,找出其中最小的 k 个数。

注意:

  • 输出数组内元素请按从小到大顺序排序;

数据范围:

1≤k≤n≤1000

样例:

输入:[1,2,3,4,5,6,7,8] , k=4
输出:[1,2,3,4]

代码:

class Solution {
    public List<Integer> getLeastNumbers_Solution(int[] input, int k) {
        //使用LinkedList存储结果,方便再头部插入元素
        LinkedList<Integer>res = new LinkedList<>();
        //创建一个大顶堆,这样队列头部始终是当前最大的元素
        Queue<Integer>pq = new PriorityQueue<>(Collections.reverseOrder());
        //遍历输入数组
        for(int i = 0;i<input.length;i++){
            //将当前元素加入堆中
            pq.offer(input[i]);
            //如果堆的大小超过k,移除堆顶元素(当前最大的元素)
            //这样可以保证堆中始终保存着当前看到的最小的k个元素
            if(pq.size()>k)pq.poll();
        }
        //由于是大顶堆,poll()会先取出最大的元素,所以添加到链表头部
        //这样最终链表中元素就是升序排列的
        while(!pq.isEmpty())res.addFirst(pq.poll());
        return res;
    }
}
posted @ 2025-05-28 09:43  回忆、少年  阅读(6)  评论(0)    收藏  举报