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;
}
}

浙公网安备 33010602011771号