BM46_题解 | #最小的K个数#
最小的K个数
https://www.nowcoder.com/practice/6a296eb82cf844ca8539b57c23e6e9bf
解题思路:
1、关键用到了PriorityQueue,最大堆,这是我日常编程中没有用到的数据结构。
具体步骤:
1、最大堆录入input数组的前k个元素。
2、再用这个堆不断跟input数组剩下的 n-1-k个元素对比。
3、转堆成list返回结果
import java.util.*; public class Solution { /** * @param input int整型一维数组 * @param k int整型 * @return int整型ArrayList */ public ArrayList<Integer> GetLeastNumbers_Solution (int[] input, int k) { ArrayList<Integer> res = new ArrayList<Integer>(); if(k > input.length || k==0 ) { return res; } PriorityQueue<Integer> q = new PriorityQueue<>((o1, o2)->o2.compareTo((o1))); for(int i=0; i<k; i++) { q.offer(input[i]); } for(int i=k; i<input.length; i++) { if(q.peek()>input[i]) { q.poll(); q.offer(input[i]); } } while(!q.isEmpty()) { res.add(q.poll()); } return res; } }