美文网首页
top k问题解法

top k问题解法

作者: 阿拉要洗澡 | 来源:发表于2017-08-26 16:03 被阅读0次


建立k个元素的最小堆 (java的优先队列也可)依次判断每个数字,大于堆顶元素进堆进堆

回到上面的取TopK问题上,用最小堆的解决方法就是:

首先建堆:先去源数据中的K个元素放到一个长度为K的数组中去,再把数组转换成最小堆。

取源数据中的K个之后的数据和堆的根节点(数组的第一个元素)比较,根据最小堆的性质,根节点一定是堆中最小的元素,如果小于它,则直接pass,大于的话,就替换掉跟元素,直到源数据遍历结束。

用优先队列:

publicintfindKthLargest(int[] nums,int k){

       PriorityQueue minQueue =newPriorityQueue<>(k);for(intnum : nums) {if(minQueue.size() < k || num > minQueue.peek())

       minQueue.offer(num);if(minQueue.size() > k)

       minQueue.poll();

       }

       returnminQueue.peek();

}

复杂度nlogk




最容易想到的方法是将数据全部排序

相关文章

  • Top K问题——Parition算法

    Top K问题概述 在非海量数据的情况下,Top K问题的首推解法就是快排中的Parition算法。不仅平均时间复...

  • top k问题解法

    建立k个元素的最小堆 (java的优先队列也可)依次判断每个数字,大于堆顶元素进堆进堆 回到上面的取TopK问题上...

  • 剑指offer 面试题30:最小的k个数

    题目:输入n个整数,找出其中最小的k个数。 解法:top K问题。如果n不大,可以一次性载入内存,则用一个数组保存...

  • top K问题

    问题:海量数据处理 - 10亿个数中找出最大的10000个数。解决方案:先拿10000个数建堆,然后一次添加剩余元...

  • Top K问题

    新文集等待补充

  • Top K 问题

    问题描述 有N(N>>10000)个整数,求出其中的前K个最大的数。 问题分析 需要前K个最大数,一定会有比较的过...

  • Top K 问题

  • Top K问题

    参考网站 在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第...

  • TOP k问题

    (1) 最小堆方法 #include using namespace std; void heap_adjust(...

  • BFPTR算法-求TOP-K问题

    BFPTR算法-求TOP-K问题 求TOP-K问题最简单的方式为快速排序后取前K大的即可。但是这样做有两个问题 快...

网友评论

      本文标题:top k问题解法

      本文链接:https://www.haomeiwen.com/subject/fuzmdxtx.html