PriorityQueue 求解topk问题

蔚落 2022-10-04 15:43 366阅读 0赞

java的底层结合了很多数据结构的变化,随着时代的进步,java也与时俱进。
HashMap中的红黑树AQS中的CLH队列内置的堆栈工具类
大小堆算法常常用于计算topk问题求解问题,
而java实际上就已经帮我们写好了,并且集成进jdk类库中。
topk问题可以用下面的优先队列来求解,默认下使用的是最小堆,可以通过传入比较器Comparator 接口来实现最大堆的求解。
PriorityQueue

示例代码如下:

  1. import java.util.ArrayList;
  2. import java.util.PriorityQueue;
  3. import java.util.Random;
  4. import java.util.Scanner;
  5. public class Demo {
  6. public static void main(String[] args) {
  7. Scanner sc = new Scanner(System.in);
  8. System.out.print("请输入k值:");
  9. int k = sc.nextInt();
  10. PriorityQueue<Integer> priorityQueue = new PriorityQueue<>(Integer::compareTo);
  11. Random random = new Random();
  12. ArrayList<Integer> integers = new ArrayList<>();
  13. for (int i = 0; i < 100; i++) {
  14. int num = random.nextInt(50);
  15. integers.add(num);
  16. priorityQueue.add(num);// 加入优先队列中
  17. }
  18. for (int i = 0; i < k; i++) {
  19. System.out.print(priorityQueue.poll()+" ");// 从队列中取出一个
  20. }
  21. System.out.println("\n所有元素排序后的结果:");
  22. integers.sort(Integer::compareTo);
  23. System.out.println(integers);
  24. }
  25. }

其中的一次执行结果如下,求top5问题

  1. 请输入k值:5
  2. 1 1 2 2 3
  3. 所有元素排序后的结果:
  4. [1, 1, 2, 2, 3, 4, 4, 6, 6, 7, 7, 7, 7, 7, 8, 8, 9, 9, 10, 11, 11, 11, 11, 12, 13, 14, 14, 14, 14, 15, 15, 16, 17, 17, 17, 19, 20, 21, 21, 21, 22, 22, 22, 22, 22, 23, 24, 25, 26, 27, 28, 28, 29, 29, 29, 29, 30, 31, 31, 31, 32, 32, 32, 32, 32, 33, 34, 34, 34, 35, 35, 35, 36, 36, 38, 38, 38, 39, 39, 40, 42, 42, 42, 42, 42, 43, 45, 45, 46, 46, 46, 46, 46, 47, 48, 49, 49, 49, 49, 49]

发表评论

表情:
评论列表 (有 0 条评论,366人围观)

还没有评论,来说两句吧...

相关阅读

    相关 算法 topK

    > 给定一个无序数组,以及一个整数k,要求返回无序数组中的第k大的数字 解法1:最大堆法(优先队列) 1. 原理:利用最大堆的特点,在将无序数组构建成最大堆后,执行k

    相关 topk算法

    从一亿个数中,取出前100个最大数。 最小堆排序。 1.首先读入前100个数,排成最小堆,时间复杂度为O(klogk)(k为数组的大小即为100)。 2.然后遍历后续

    相关 TopK问题

    典型问题 :给定一个100亿(N)个数字,让你找出其中前1000(M)大的数字 两种不同解决方案: 1.用一个数组保存刚才的那些数字,直接在这个数组上建大堆,循环1000

    相关 PriorityQueue 求解topk问题

    java的底层结合了很多数据结构的变化,随着时代的进步,java也与时俱进。 `HashMap中的红黑树`、`AQS中的CLH队列`、`内置的堆栈工具类`。 大小堆算法

    相关 PriorityQueue

    分享一下我老师大神的人工智能教程!零基础,通俗易懂![http://blog.csdn.net/jiangjunshow][http_blog.csdn.net_jiangju

    相关 TopK问题

    从文件中输出请求最频繁的10个 HTTP 接口,及其相应的请求数量 数据格式如下 GET /mdc/city/queryAllCities.json?arg1=v