topk問題

從大數(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());

? ? }

}

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容