從大數(shù)據(jù)中找到TopK個數(shù),比較經典的就是維護一個小根堆,堆頂是堆中最小的元素,每次通過移除堆頂,重新堆排序來維護這個結構。
每次判斷隊列頂端元素和新元素大小決定是否入隊,當超過維護的上限時移除堆頂元素。
public static void findKthLargest(int[] nums, int k) {
? ? PriorityQueue<Integer> minQueue = new PriorityQueue<>(k);
? ? for (int num : nums) {
? ? ? ? if (minQueue.size() < k || num > minQueue.peek())
? ? ? ? ? ? minQueue.offer(num);
? ? ? ? if (minQueue.size() > k)
? ? ? ? ? ? minQueue.poll();
? ? }
? ? for(int i=0;i<k;i++){
? ? ? ? System.out.println(minQueue.poll());
? ? }
}